6

NSBrowser で現在選択されているパスを使用して NSPathControl を更新し続ける必要がありますが、パスが NSBrowser から変更されたときに通知を受け取る方法がわかりません。これを行う理想的な方法は、NSBrowser でパス キー パスを観察することですが、これにより、KVO は<key>void メッセージを返し、更新を行わない set メソッドのみを観察できます (setPath は bool 成功値を返します)。

selectedCell キーパスも観察しようとしましたが、選択が変更されたときに通知が届きません。

私が見逃しているこれを行うための他の本当に明白な方法はありますか?

4

3 に答える 3

8

CocoaDevでのRobKenigerの礼儀

/ Developer / ExamplesにあるSimpleBrowserの例を見たことがありますか?これは、基本的にNSBrowserのアクションを設定するだけで、ユーザーが現在の選択を変更したときに現在の選択を取得する方法を示しています。

それは確かにそれを行う方法です。コントローラのようなメソッドを実装し、そのメソッド内で選択が変更されるたびに発生したいことをすべて使用して、インターフェイスビルダーのの- (void)browserClicked:にマップします。NSBrowseraction

- (void)browserClicked:(id)browser {
    self.pathToSelectedCell = [browser path]; // NSPathControl is bound to pathToSelectedCell
}
于 2008-12-10T03:28:26.303 に答える
0

10.6 以降、次のようにデリゲート コールバックを使用して、どの項目が選択されているかを確認できます。

- (NSIndexSet *)browser:(NSBrowser *)browser selectionIndexesForProposedSelection:(NSIndexSet *)proposedSelectionIndexes inColumn:(NSInteger)column
{
    NSLog(@"New first item of the new selection is at index %@", [proposedSelectionIndexes firstIndex]);
    // Do something with the selected index or indicies
    return proposedSelectionIndexes; // Allow the selection to occur by not changing this
}
于 2013-03-06T18:43:43.343 に答える
0

IB を確認したところ、NSBrowser には KVO で監視できる選択インデックス パス バインディング (NSIndexPath オブジェクトの配列) があるようです。奇妙ですが、ドキュメントでそれについて言及されていないので、動作しているように見えても、それが使用すべきかどうかを確認するために少し調査する必要があるかもしれません. その場合、KVO 監視メソッドでブラウザの現在のパスを見つけ、それをパス コントロールが使用できる NSURL に変換します。

それがうまくいかない場合は、デリゲート メソッド- (BOOL)browser:(NSBrowser *)sender selectRow:(NSInteger)row inColumn:(NSInteger)column- (BOOL)browser:(NSBrowser *)sender selectCellWithString:(NSString *)title inColumn:(NSInteger)column.

于 2008-12-10T00:03:08.950 に答える