5

そこでPXSourceList、Apple のNSOutlineViewデータ ソースの例とほぼ同じデータ ソースを実装しました。

こうやって…

- (NSUInteger)sourceList:(PXSourceList*)sourceList numberOfChildrenOfItem:(id)item; {
    if (item == nil) {
        // item is nil so it's part of the very top hierarchy.
        // return how many sections we need.
        return 2;
    }
    else {
        if ([item class] == [TSFileSystemItem class] ) {
            return [item numberOfChildren];
            // if item isn't nil and it's a TSFileSystemItem, then return it's children.
        }
        if ([item class] == [TSWorkspaceItem class]) {
            return 2; // i don't know, random items.
        }
        else {
            NSLog(@"this is a special object.");
        }
    }
}

- (BOOL)sourceList:(PXSourceList *)aSourceList isItemExpandable:(id)item {
    if (item == nil) {
        return YES;
    }
    else {
        // if the number of children of the item is -1
        BOOL gibberhook = ([item numberOfChildren] != -1);
        return gibberhook;
    }
}

-(id)sourceList:(PXSourceList *)aSourceList child:(NSUInteger)index ofItem:(id)item {
    if (item == nil) {
        return [TSFileSystemItem rootItem];
    }
    else {
        return [(TSFileSystemItem *)item childAtIndex:index];
    }
}

- (id)sourceList:(PXSourceList *)aSourceList objectValueForItem:(id)item {
    if (item == nil) {
        return @"/";
    } else {
        if (item == [TSFileSystemItem rootItem]) {
            return PROJECT_FILES;
        }
        else {
            return [item relativePath];
        }
    }
}

TSFileSystemItemはここからです: https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/OutlineView/Articles/UsingOutlineDataSource.html .

ソース リストを複数のセクション (ルート セル) に分割したいことを除けば、これですべて問題ありません。1 つはファイル階層を表示 (チェック) し、もう 1 つは...

NSMutableArrayもう1 つのセクションには、他のセクションから項目を追加するが含まれます。複雑に聞こえますか?より良い説明。ファイル階層のあるセクションからアイテムをクリックすると、他のセクションに追加されます。

Apple のドキュメントの助けを借りてこの混乱を解決しようとしましたが、上記の関数を使用して 2 つのセクションを作成する簡単で効率的で安定した方法をまだ見つけることができません。データソースを構成するのと同じくらい簡単だったらUITableView...

誰か親切に助けてくれませんか?

4

1 に答える 1

0

childrenForItem デリゲート メソッドが呼び出され、アイテムが nil の場合、これはツリーのルートを要求します。配列を返すと、ツリーはその配列内の各要素のルート ノードを持ちます。

- (NSArray *)childrenForItem:(id)item {
    if (item == nil) {
        return [self.rootTreeNode childNodes];
    } else {
        return [item childNodes];
    }
}
于 2013-08-03T23:00:48.293 に答える