私はNSOutlineView
なし NSTreeController
で使用しており、独自のデータソースを実装しています。アイテムを選択する最良の方法は何ですか?
NSOutlineView
サポート済みexpandItem:
ですcollapseItem:
。そして、selectItem: のような便利なメソッドがありません。どうすればプログラムでそれを行うことができますか?
ありがとうございました。
私はNSOutlineView
なし NSTreeController
で使用しており、独自のデータソースを実装しています。アイテムを選択する最良の方法は何ですか?
NSOutlineView
サポート済みexpandItem:
ですcollapseItem:
。そして、selectItem: のような便利なメソッドがありません。どうすればプログラムでそれを行うことができますか?
ありがとうございました。
何かが見つからない場合は、忘れずにスーパークラスを調べてください。この場合、必要なメソッドの 1 つは、NSOutlineView の直接のスーパークラスである NSTableView からのものです。
解決策は、を使用して項目の行インデックスを取得し、rowForItem:
それが -1 でない場合 (項目が表示されない/見つからない)、でインデックス セットを作成し、[NSIndexSet indexSetWithIndex:]
そのインデックス セットをselectRowIndexes:byExtendingSelection:
メソッドに渡すことです。
これが私がついに終わった方法です。提案や訂正はいつでも大歓迎です。
@implementation NSOutlineView (Additions)
- (void)expandParentsOfItem:(id)item {
while (item != nil) {
id parent = [self parentForItem: item];
if (![self isExpandable: parent])
break;
if (![self isItemExpanded: parent])
[self expandItem: parent];
item = parent;
}
}
- (void)selectItem:(id)item {
NSInteger itemIndex = [self rowForItem:item];
if (itemIndex < 0) {
[self expandParentsOfItem: item];
itemIndex = [self rowForItem:item];
if (itemIndex < 0)
return;
}
[self selectRowIndexes: [NSIndexSet indexSetWithIndex: itemIndex] byExtendingSelection: NO];
}
@end
いいえ、方法はありませんが、selectItem:
方法はありrowForItem:
ます。上記の使用に関するピーターのアドバイスとそれを組み合わせると、selectRowIndexes:byExtendingSelection:
必要なすべての情報が得られるはずです。
アイテムを選択する方法が本当に必要な場合はsetSelectedItem:
、一貫性のために呼び出すことをお勧めします。NSOutlineView
- (void)setSelectedItem:(id)item {
NSInteger itemIndex = [self rowForItem:item];
if (itemIndex < 0) {
// You need to decide what happens if the item doesn't exist
return;
}
[self selectRowIndexes:[NSIndexSet indexSetWithIndex:itemIndex] byExtendingSelection:NO];
}
このコードが実際に機能するかどうかはわかりません。概念を説明するために、それを破っただけです。
以下は、PXSourceList 内の項目をプログラムで選択するために使用したコード スニペットです。
sourceList は通常の PXSouceList オブジェクトであり、アウトラインの最初のグループの 2 番目の項目を選択したいと考えていました。
NSInteger itemRow = [sourceList rowForItem:[[(SourceListItem *)[sourceListItems objectAtIndex:0] children] objectAtIndex:1]]; [sourceList selectRowIndexes:[NSIndexSet indexSetWithIndex:itemRow] byExtendingSelection:YES];
まだわからない場合は、iTunes/メール スタイルのアウトラインを探している場合、PXSourceList は NSOutlineView の優れた代替品です。ここでピックアップ: PxSourceList