处理包含文本字段和滚动视图的Cocoa视图中的选项卡

时间:2016-12-07 01:22:19

标签: objective-c macos cocoa nsresponder

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

在应用启动时,NSTextField具有焦点,键入会在该文本框中输入字符。当我按下TAB键时,它会失去焦点。但是接口中没有任何其他东西,比如NSScrollView,会获得焦点。我不能告诉任何关键事件发生的地方。

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

1 个答案:

答案 0 :(得分:1)

首先,您应该尝试重复按Tab键以查看焦点是否会转到滚动视图或返回到文本字段。

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

如果您确实希望滚动视图接受焦点,则需要覆盖-acceptsFirstResponder方法以返回YES

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

或者,您可以通过关闭autorecalculatesKeyViewLoop并致电-recalculateKeyViewLoop来手动告诉它重新计算。

或者,您可以通过在代码或Interface Builder中连接每个视图的nextKeyViewpreviousKeyView属性来自行设置关键视图循环。