1

私は NSTreeController を使用して Outlineview を持っています。ほとんどの場合、新しいアイテムが追加されたときを除いて、すべてが思いどおりに機能しています。編集のためにアイテムが自動的に選択されるようにします。過去に NSTableview を使用するとき、アイテムが配置されている行を特定し、関数を使用していました

- (void)editColumn:(NSInteger)columnIndex row:(NSInteger)rowIndex withEvent:(NSEvent *)theEvent select:(BOOL)flag

ただし、NSOutlineView は NSindexPath を使用するため、これを達成する方法に苦労しているため、行ではなく NSIndexpath を渡して同じ結果を得る関数があります。または、NSOutlineView には別のアプローチが必要です。

4

2 に答える 2

3

editColumn:row:withEvent:select:NSOutlineViewを呼び出すだけでよいはずです。

[outlineView editColumn:0 row:editRowIndex withEvent:nil select:YES];

これは のメソッドですがNSTableViewNSOutlineViewのサブクラスであるNSTableViewため、アウトライン ビューでも呼び出すことができます。

于 2013-10-05T23:03:02.807 に答える
1

私の問題はaddChildメソッドに関連していたことがわかりました.addChildのドキュメントは次のことを示しています;

特別な考慮事項

OS X v10.4 以降、このメソッドの結果は実行ループの次の反復まで延期されるため、エラー表示メカニズムはフィードバックをシートとして提供できます。

そのため、対応するセレクターとともに以下を追加しました

[self performSelector:@selector(editNewSector:) withObject:nil afterDelay:0];

すべてが機能しているようです。私のコードは以下のとおりです

- (IBAction)addChildSector:(id)sender
{
    [[self myTreeController] addChild:sender];
    [self performSelector:@selector(editNewSector:) withObject:nil afterDelay:0];
}

- (IBAction)editNewSector:(id)sender
{
    NSTreeNode *nodeSector = [[self myOutlineView]
                                   itemAtRow:[[self myOutlineView] selectedRow]];

    NSInteger row = [[self myOutlineView] rowForItem:nodeSector];
    [[self myOutlineView] editColumn:0 row:row withEvent:nil select:YES];
}
于 2013-10-06T13:22:48.470 に答える