在我Browser
选择默认行的实现中,我使用了以下代码。
[browser setTarget:self];
[browser setAction:@selector(singleClickOnBrowser:)];
[browser sendActionOn:NSLeftMouseDown];
[browser selectRow:0 inColumn:0];
[browser sendAction];
有没有办法区分用户点击和第一次选择的行来选择默认行?
在我Browser
选择默认行的实现中,我使用了以下代码。
[browser setTarget:self];
[browser setAction:@selector(singleClickOnBrowser:)];
[browser sendActionOn:NSLeftMouseDown];
[browser selectRow:0 inColumn:0];
[browser sendAction];
有没有办法区分用户点击和第一次选择的行来选择默认行?
在我的应用程序中,我需要跟踪在 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);
}
}
顺便说一句,编程选择不会触发 browserCellSelected: 方法,并且用户单击不会调用委托的 browser:selectRow:inColumn: 方法。
我没有找到任何 API 来区分用户单击并从代码中选择行和列。为了实现这一点,我声明了一个 BOOL 变量来跟踪用户点击。
在代码之后,我更改了代码中的 BOOL 变量。
self.userClickedOnRow = NO;
[self.browser selectRow:0 inColumn:0];
[self.browser sendAction];
self.userClickedOnRow = YES;
实现了以下委托
- (void)browser:(NSBrowser *)browser didChangeLastColumn:(NSInteger)oldLastColumn toColumn:(NSInteger)column
{
if(!self.userClickedOnRow)
{
NSLog(@"Programatic selection");
}
if (self.userClickedOnRow)
{
self.userClickedOnRow = NO;
// User Clicked on the browser,Do the required actions and set the variable again.
self.userClickedOnRow = YES;
}
}
您可以继承 NSBrowser 并覆盖 doClick。文档说 doClick 是鼠标单击事件的处理程序,但目前当使用键盘箭头更改行时也会调用它。以下对我有用:
@implementation MyBrowser
...
- (void)doClick:(id)sender {
[super doClick:sender];
//
// Here you can add any handler AFTER the selection has changed
//
}
...
@end