0

在我的 Cocoa 应用程序中,我有一个包含 NSTextField(原样)和 NSScrollView(子类)的窗口。我有一个 NSViewController 来管理包含文本字段和滚动视图的窗口的 NSView。

在应用程序启动时,NSTextField 具有焦点,并且键入会将字符输入到该文本框中。当我按 TAB 键时,它会失去焦点。但是界面中没有其他东西,如 NSScrollView,获得焦点。我不知道任何按键事件发生在哪里。

如何将焦点转移到 NSScrollView,以便按键事件可以影响它(例如,箭头键、隐式搜索等)?

4

1 回答 1

1

首先,您应该尝试反复点击 Tab 以查看焦点是否进入滚动视图或返回到文本字段。

您不会说滚动视图中的内容是文档视图。与让滚动视图本身接受焦点不同,更常见的是文档视图或其后代视图之一接受焦点。然后,将移动键传递给它,如果没有消耗它们,它们会将响应链冒泡到滚动视图,它会自动处理它们。

如果你真的希望你的滚动视图接受焦点,你需要重写-acceptsFirstResponder返回的方法YES

Tab 的行为由窗口控制。它维护一个关键视图循环。它可以在添加和删除视图时自动重新计算关键视图循环。这可能是最可靠的方法。见autorecalculatesKeyViewLoop物业。

或者,您可以手动告诉它根据需要重新计算,方法是关闭autorecalculatesKeyViewLoop并调用-recalculateKeyViewLoop.

或者,您可以通过在代码或 Interface Builder 中连接每个视图nextKeyView和属性来显式设置关键视图循环。previousKeyView

于 2016-12-07T05:11:35.617 回答