在我的Browser
实现中,为了选择默认行,我使用了以下代码。
[browser setTarget:self];
[browser setAction:@selector(singleClickOnBrowser:)];
[browser sendActionOn:NSLeftMouseDown];
[browser selectRow:0 inColumn:0];
[browser sendAction];
有没有办法区分用户点击和第一次选择的行来选择默认行?
答案 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