如何让我的NSTextView正确响应Home和End键?

时间:2016-02-14 22:50:37

标签: macos cocoa nstextview

Apple会NSTextView自动回复页面向上,向下翻页,箭头键等,但主页和结束键不会由NSTextView自动处理。这没有明显的理由;我刚刚登录了雷达。在他们修复Radar之前,问题是:如何让NSTextView正确处理这些键?

我只是花了一段时间来搜索这个,并没有在SO或其他地方找到一个好的现代答案,所以我在这里发布我自己的答案只是为了其他人的参考

1 个答案:

答案 0 :(得分:0)

执行此操作的错误方法是实现keyDown:并检查已按下的特定键。这绕过了苹果公司的键绑定机制,它实际上为“滚动到开始”和“滚动到结束”的概念提供了所需的选择器; NSTextView只是不响应这些选择器。

您需要做的就是在NSTextView子类中添加以下内容:

- (void)scrollToBeginningOfDocument:(id)sender
{
    [self scrollRangeToVisible:NSMakeRange(0, 0)];
}
- (void)scrollToEndOfDocument:(id)sender
{
    [self scrollRangeToVisible:NSMakeRange([[self string] length], 0)];
}

这会将相关键绑定的NSResponder方法挂钩到NSTextView中的相应操作。 NSResponder上的这些方法似乎从10.6左右就已经公开了,并且在此之前可能已经存在了一段时间,所以这个解决方案应该适用于所有现代系统。