macos – 如何将键盘上下事件从NSTextField转发到NSTableView?

macos – 如何将键盘上下事件从NSTextField转发到NSTableView?,第1张

概述我正在尝试模拟Spotlight在Yosemite中的工作方式,其中NSTextField(搜索字段)在按下向上/向下箭头键并向上和向下移动tableview选项时始终保持焦点. 我已经实现了以下代码: - (BOOL)control:(NSControl *)control textView:(NSTextView *)textView doCommandBySelector:(SEL)comm 我正在尝试模拟Spotlight在Yosemite中的工作方式,其中NSTextFIEld(搜索字段)在按下向上/向下箭头键并向上和向下移动tablevIEw选项时始终保持焦点.

我已经实现了以下代码:

- (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];

我遇到的问题是我创建了不应该选择的Section header行,并且我已经使用NStableVIEwDelegate方法禁用了这些行的选择:

- (BOol)tableVIEw: (NStableVIEw *)tableVIEw shouldSelectRow: (NSInteger)row

但是,即使委托方法表明无法选择行,selectRowIndexes:indexSetWithIndex:currentRowbyExtendingSelection:方法也会选择标题行.

无论NStableVIEwDelegate说什么,似乎你仍然可以以编程方式选择行.我想要的是选择跳转标题行.

如果NStableVIEw是第一个响应者,则内置键盘控件会跳过标题行.

所以我的问题是有没有办法将上/下事件发到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;}
总结

以上是内存溢出为你收集整理的macos – 如何将键盘上/下事件从NSTextField转发到NSTableView?全部内容,希望文章能够帮你解决macos – 如何将键盘上/下事件从NSTextField转发到NSTableView?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1001084.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-21
下一篇 2022-05-21

发表评论

登录后才能评论

评论列表(0条)

保存