Mac開發(fā)時(shí)使用NSOutlineView來(lái)實(shí)現(xiàn)層級(jí)結(jié)構(gòu)顯示數(shù)據(jù)時(shí),比如文件管理,往往需要展開對(duì)應(yīng)層級(jí)。
系統(tǒng)提供的方法是:
- (void)expandItem:(nullable id)item expandChildren:(BOOL)expandChildren;
但是在使用這個(gè)方法的時(shí)候,往往達(dá)不到理想的效果,我一開始是這樣使用的:
[_outlineView expandItem:expandItem?expandChildren:NO];
其中expandItem是我想要展開的那個(gè)節(jié)點(diǎn)的model。
但是運(yùn)行起來(lái)發(fā)現(xiàn),只有當(dāng)expandItem是當(dāng)前所在層級(jí)的item時(shí),才能展開,也就是想要展開指定的item,需要先一層層展開它的父級(jí),直到root為止。
于是我們這樣寫:
JDSLayerModel *superM = expandItem.superLayer;
while (superM) {
? ? ? ? ? ? ? ? [_outlineView expandItem:superM expandChildren:NO];
?? ? ? ? ? ? ? ?superM = superM.superLayer;
}
[_outlineView expandItem:expandItem expandChildren:NO];