从app委托中,我创建一个窗口并将其contentView设置为以plist规范编程生成的视图。然后我把窗户拉到前面。窗口有一个工具栏,当按下工具栏上的按钮时,它应该显示不同的contentView。
我发现第一个内容视图的最顶层文本字段子视图已经被选为第一响应者,但是从工具栏中更改视图(它将窗口上的contentView设置)到另一个视图将不会选择任何视图文本字段作为第一响应者。
我想要保持一致性,所以理想情况下要么永远不会自动选择控件作为第一响应者,要么总是自动选择控件作为第一响应者,但我真的不明白什么过程使控件成为第一响应者响应者首先。
有人可以解释导致这种情况的原因,所以我可以阻止它或者在切换视图时尝试模拟它吗?
答案 0 :(得分:3)
hussain Shabbir的答案是在正确的轨道上,但遗漏了一些事情。
首先,设置窗口的初始第一响应者,然后将同一视图作为第一响应者,是多余的。第一个要点是引发第二个。
其次,您需要在使窗口可见之前设置窗口的初始第一响应者 :
将给定视图设置为第一次将窗口放置在屏幕上时作出第一响应者(也称为键视图)的视图。
如果在设置初始第一响应者时窗口已经可见,则不会发生任何事情。
您需要在之前设置初始第一响应者,这是您第一次看到该窗口。
最好的地方不是在代码中 - 它在笔尖中。
您将不会拥有这些代码行。
更好的是:
窗口有一个工具栏,当按下工具栏上的按钮时,它应该显示不同的contentView。
你考虑过使用NSTabView吗?它会自动处理(每个标签视图项都有自己的初始第一响应者插座)。
答案 1 :(得分:1)
如果你想要点击不同的视图,你的文本字段应该成为第一响应者,那么下面的两行代码应该有效: - 这里根据您的情况使用以下这些行: -
[[self window] setInitialFirstResponder:(NSView *)YourTextFieldName];
[[self window] makeFirstResponder:(NSView *)YourTextFieldName];