确定是不是所有控件都可以获得焦点(即成为第一响应者)

Posted

技术标签:

【中文标题】确定是不是所有控件都可以获得焦点(即成为第一响应者)【英文标题】:Determine whether all controls can get focus (i.e. become first responder)确定是否所有控件都可以获得焦点(即成为第一响应者) 【发布时间】:2019-06-02 17:54:23 【问题描述】:

我需要检测是否有任何NSControl,例如NSButton,可以使用Tab 键获得焦点。

如果用户在系统偏好设置中启用了键盘/快捷方式/键盘/“更改选项卡移动焦点的方式”下的选项,则可以。

更具体地说,我喜欢让 NSButton 成为第一响应者,但前提是启用了“所有控件都可以获得焦点”模式。也许我可以询问控件是否接受 firstReponder 状态?

我尝试在按钮上调用 acceptsFirstResponder,但即使使用 Tab 键无法成为 firstReponder 也会返回 YES,所以这不是正确的方法。

【问题讨论】:

【参考方案1】:

canBecomeKeyView 是您要查找的属性/方法。

来自Cocoa Event Handling Guide, Keyboard Interface Control

acceptsFirstResponder 方法控制响应者在其窗口请求时是否接受第一响应者状态(即当 makeFirstResponder: 以响应者作为参数调用时)。 canBecomeKeyView 方法控制应用程序工具包是否允许通过选项卡进入视图。它调用acceptsFirstResponder,但它还在确定要返回的值之前检查其他信息,例如视图是否隐藏以及是否开启了全键盘访问。

【讨论】:

以上是关于确定是不是所有控件都可以获得焦点(即成为第一响应者)的主要内容,如果未能解决你的问题,请参考以下文章

成为第一响应者后如何识别点击文本视图?

Android中ListView的Item的子控件获取焦点问题

如何让一个控件能主动获取到焦点

Android TV开发焦点移动源码分析

vb6 webbrowser 如何判断当前网页中获取焦点的是否一个文本框?

vb如何让控件丢失焦点?