5

まず第一に、私はココア開発に慣れていないので、おそらくこれを間違った方法で行おうとしていると思いますが、次のようになります。

NSOutlineView実装からデータをロードする がありますNSOutlineViewDataSource。ロード後にすべてのアイテムを展開したいのですが、データのロードが完了したときに発生するイベントが見つからないように見えるので、それに送信できます[outlineView expandItem: nil expandChildren: YES]

プロトコルを調べましたNSOutlineViewDelegateが、この通話に適した場所が見つかりませんでした。この問題に対する最善のアプローチは何でしょうか?

4

4 に答える 4

3

私が思いついた最善の解決策はNSOutlineView、ゼロの遅延の後に展開するメソッドを作成することです。

- (void)windowDidLoad
{
    [super windowDidLoad];
    [self performSelector:@selector(expandSourceList) withObject:nil afterDelay:0.0];
}

- (IBAction)expandSourceList
{
    [mSourceListView expandItem:nil expandChildren:YES];
}
于 2012-03-01T06:30:30.370 に答える
2

私は答えを見つけました。デリゲートメソッドを実装する-(void)outlineView:(NSOutlineView *)outlineView willDisplayCell:(id)cell forTableColumn:(NSTableColumn *)tableColumn item:(id)item ことでうまくいくようです。


-(void)outlineView:(NSOutlineView *)outlineView willDisplayCell:(id)cell forTableColumn:(NSTableColumn *)tableColumn item:(id)item
{
    [outlineView expandItem:item];
}
于 2010-04-14T10:27:33.193 に答える
1

これが私が通常これを処理する方法です。メイン ウィンドウを自動的に表示するのではなく、自分で表示するのが好きです。これにより、ユーザーにウィンドウを表示する前に、すべてのインターフェイス項目が希望どおりに設定されていることを確認できます。これもできそうです。最初に、ウィンドウのインターフェイスビルダーで「起動時に表示」のチェックを外します。次に、アプリケーションのデリゲート クラスで、NSApplication の deleate メソッドであるこのメソッドを使用します。

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification

その時点ですべてがロードされていることがわかっているので、そこでインターフェース項目をセットアップします。そして、そのメソッドの最後の行は [myWindow makeKeyAndOrderFront:self]; になります。このようにして、ユーザーがウィンドウを見る前に、ウィンドウが完璧であることを知ることができます。だから私はそこであなたの方法を試してみます。

于 2010-04-13T18:50:24.773 に答える