在我的Cocoa应用程序中,我有一个包含NSTextField(原样)和NSScrollView(子类)的窗口。我有一个NSViewController来管理包含文本字段和滚动视图的窗口的NSView。在Cocoa视图中处理包含文本字段和滚动视图的选项卡
在应用程序启动时,NSTextField具有焦点,并且键入将字符输入到该文本框中。当我按下TAB键时,它失去了焦点。但是NSScrollView等界面中没有其他任何东西获得焦点。我无法确定任何关键事件发生的地方。
如何将焦点转移到NSScrollView,以便按键事件可以影响它(例如,箭头键,隐式搜索等)?
当滚动视图(文档视图)中存在多个子视图时,但它们都没有任何子子视图时,焦点不会离开文本编辑字段。但是当几个子视图有子子视图(vanilla NSViews)时,反复敲击TAB不会在滚动视图上显示任何焦点,但最终会返回到文本编辑字段。周期长度似乎与子子视图的数量有关。 – jsbox
在子子视图中关闭“accepFirstResponder”以清除状况。原来,他们仍然接受mouseDown事件,这就是为什么我认为“accepFirstResponder”应该被设置为YES。但是为滚动视图设置“accepFirstResponder”并不会改变任何默认行为,所以这仍然是一个谜。 – jsbox
你如何确定滚动视图没有得到重点?你有没有尝试改变其'focusRingType'?这可能是没有的,所以不会有任何视觉上的改变。无论如何,正如我所说,文档视图本身更为典型地接受焦点。例如,当表视图位于滚动视图内时,它是接受焦点的表视图,而不是滚动视图。 –