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

How do I get my NSTextView to respond properly to the Home and End keys?

Apple 使 NSTextView 自动响应向上翻页、向下翻页、箭头键等,但开箱即用的 NSTextView 不会自动处理主页和结束键。没有明显的原因。我刚刚在上面记录了雷达。在他们修复该 Radar 之前,问题是:我如何让我的 NSTextView 正确处理这些键?

我只是花了一点时间在谷歌上搜索了一下,并没有在 SO 或其他地方找到一个好的现代答案,所以我在这里发布我自己的答案仅供其他人参考。

执行此操作的错误方法是执行keyDown:并检查已按下的特定键。这绕过了 Apple 的键绑定机制,它恰好为 "scroll to beginning" 和 "scroll to end" 的概念提供了所需的选择器; 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 上的这些方法似乎 public 自 10.6 左右以来,并且可能在此之前实际存在了一段时间,因此该解决方案应该适用于所有现代系统。