我在我的Cocoa应用程序中有一个表单,其中包含一个我想通过键盘控制的NSSegmentedControl。然而,看起来NSSegmentedControl非常不愿意成为第一个响应者。
将窗口的初始first responder设置为分段控件不会产生任何影响--当第一次加载窗口时,它将不具有键盘焦点。但是,如果我像这样手动设置first responder,它确实会收到焦点:
[segmentedControl.window makeFirstResponder: segmentedControl];
如果窗体的唯一部分是分段控件,则可以很好地工作。如果我添加另一个字段(例如,NSTextField),并将分段控件的nextResponder设置为该字段,则分段控件永远不会成为第一响应者。焦点将立即转到文本字段,按tab键切换回分段控件不起作用。
我尝试对NSSegmentedControl进行子类化并覆盖acceptsFirstResponder、becomeFirstResponder等,但都无济于事。唯一有区别的是resignFirstResponder --如果我从该方法返回NO,那么分段的控件确实会保持焦点,但显然我不希望它始终保持焦点。
关于如何让控制者表现得像一个正常的响应者,你有什么想法吗?
发布于 2012-05-28 10:29:31
它的行为符合预期。并不是所有的控件都参与“键视图循环”。全键盘导航是通过系统偏好设置中的通用访问为所有应用程序打开的,这不是单个应用程序自己实现的。
最好不要在用于繁重键盘输入的窗体中使用分段控件。NSPopUpButton更接近于我们在web表单中所期望的东西,所以在你的应用程序的UI中,它不一定是错误的选择。
与其准确地回答你所问的问题(其他人也能做到),我谦虚地建议你选择功能方面的东西,而不是以稍微漂亮一些的UI元素为代价,因为这个漂亮的UI元素并不是为了与键盘配合使用。
https://stackoverflow.com/questions/10778402
复制相似问题