我试图模拟 Spotlight 在 Yosemite 中的工作方式,其中 NSTextField(搜索字段)在按下向上/向下箭头键并上下移动表格视图选择时始终保持焦点。
我已经实现了以下代码:
- (BOOL)control:(NSControl *)control textView:(NSTextView *)textView doCommandBySelector:(SEL)commandSelector
{
if (commandSelector == @selector(moveUp:)) {
// move up
return YES;
} else if(commandSelector == @selector(moveDown:)){
// move down
return YES;
}
return NO;
}
虽然我可以使用它来向上/向下移动行选择,例如:
[self.tableView selectRowIndexes:[NSIndexSet indexSetWithIndex:currentRow ± 1] byExtendingSelection:NO];
我遇到的问题是,我创建了不应选择的节标题行,并且我已使用 NSTableView Delegate 方法禁用了对这些行的选择:
- (BOOL)tableView: (NSTableView *)tableView shouldSelectRow: (NSInteger)row
但发生的情况是selectRowIndexes:indexSetWithIndex:currentRowbyExtendingSelection:
即使委托方法表示无法选择该行,方法也会选择标题行。
看来无论 NSTableViewDelegate 说什么,您仍然可以以编程方式选择行。我想要的是选择跳过标题行。
如果 NSTableView 是firstResponder
那么内置键盘控件会跳过标题行。
所以我的问题是有没有办法将向上/向下事件转发到 NSTableView 以便移动选择的内置机制起作用?
以下对我有用,但我不确定是否有任何副作用。
- (BOOL)control:(NSControl *)control textView:(NSTextView *)textView doCommandBySelector:(SEL)commandSelector
{
if (commandSelector == @selector(moveUp:)) {
// move up
[_tableView keyDown:[NSApp currentEvent]];
return YES;
} else if(commandSelector == @selector(moveDown:)){
// move down
[_tableView keyDown:[NSApp currentEvent]];
return YES;
}
return NO;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)