6

我需要使用 NSBrowser 中当前选择的路径来更新 NSPathControl,但是当路径从 NSBrowser 发生更改时,我无法找出获取通知的方法。执行此操作的理想方法只是观察 NSBrowser 中的路径键路径,但这使得 KVO 只能观察<key>返回 void 消息且没有更新的 set 方法(setPath 返回 bool 成功值)。

I also tried observing the selectedCell key path, but I'm not getting notifications when the selection there is changed.

还有其他一些我想念的非常明显的方法吗?

4

3 回答 3

8

由Cocoa Dev的 Rob Keniger 提供:

您是否查看过 /Developer/Examples 中的 SimpleBrowser 示例?它显示了如何在用户更改当前选择时获取当前选择,基本上只需设置 NSBrowser 的操作。

这确实是做到这一点的方法。只需在您的控制器中实现一个方法- (void)browserClicked:,并将其映射到NSBrowser's actionin interface builder,每次选择在该方法内发生变化时,您希望发生的任何事情,例如

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

我刚刚签入了 IB,看起来 NSBrowser 有一个选择索引路径绑定(一个 NSIndexPath 对象数组),您可以使用 KVO 对其进行监控。这很奇怪,但我在文档中没有看到任何提及,所以你可能需要做一些研究,看看你是否应该或不应该使用它,即使它似乎有效。如果是这样,在您的 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 回答
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 回答