如何找到用户点击NSBrowser中的任何行?

时间:2012-08-06 08:41:24

标签: objective-c macos cocoa nsbrowser

在我的Browser实现中,为了选择默认行,我使用了以下代码。

[browser setTarget:self];
[browser setAction:@selector(singleClickOnBrowser:)];
[browser sendActionOn:NSLeftMouseDown];
[browser selectRow:0 inColumn:0];
[browser sendAction];

有没有办法区分用户点击和第一次选择的行来选择默认行?

2 个答案:

答案 0 :(得分:4)

在我的应用中,我需要跟踪NSBrowser中选择的最后一项。以下设置NSBrowser:

- (void)awakeFromNib
{
    [browser setDelegate:self];
    [browser setTarget:self];
    [browser setAction:@selector(browserCellSelected:)];
    [browser setSendsActionOnArrowKeys:YES];
}

以下处理单元格,因为它们被选中。这适用于鼠标或键盘的选择。如果您的应用允许多个选择,您的操作方法将需要处理。

- (void)browserCellSelected:(id)sender
{
    NSIndexPath *indexPath = [browser selectionIndexPath];
    MyItem *myItem = [browser itemAtIndexPath:indexPath];
    if (myItem)
    {
        NSLog(@"Selected Item: %@", myItem.name);
    }
}
BTW,程序化选择不会触发browserCellSelected:方法和用户点击不会调用委托的浏览器:selectRow:inColumn:method。

答案 1 :(得分:0)

您可以继承NSBrowser并覆盖doClick。文档说doClick是鼠标单击事件的处理程序,但目前在使用键盘箭头更改行时也会调用它。以下对我有用:

@implementation MyBrowser

...

- (void)doClick:(id)sender {
    [super doClick:sender];

    //
    // Here you can add any handler AFTER the selection has changed
    //
}

...

@end