1

从应用程序委托中,我创建了一个窗口并将其 contentView 设置为从 plist 规范以编程方式生成的视图。然后我把窗户带到前面。该窗口有一个工具栏,当按下工具栏上的按钮时,它应该显示不同的 contentView。

我发现第一个内容视图出现时,其最上面的文本字段子视图已被选为第一响应者,但是将视图从工具栏(它在窗口上设置 contentView)更改为不同的视图不会选择该视图的任何文本字段作为急救人员。

我希望保持一致性,因此理想情况下,它要么永远不会自动选择控件作为第一响应者,要么总是自动选择控件作为第一响应者,但我真的不明白是什么过程使控件成为第一响应者第一名。

有人可以解释是什么原因造成的,所以我可以在切换视图时阻止它或尝试模仿它?

4

2 回答 2

3

侯赛因沙比尔的回答是正确的,但错过了一些事情。

首先,设置窗口的初始第一响应者,然后将同一个视图设为第一响应者,这是多余的。第一个的要点是导致第二个。

其次,您需要在使窗口可见之前设置窗口的初始第一响应者:

将给定视图设置为第一次将窗口放置在屏幕上时作为第一响应者(也称为键视图)的视图。

如果在设置初始第一响应者时窗口已经可见,则不会发生任何事情。

在第一次使窗口可见之前,您需要设置初始第一响应者。

做到这一点的最佳位置根本不在代码中,而是在 nib 中。

只需将连接从窗口的 initial-first-responder 出口拖到视图。

然后,您将没有这两行代码。

更好的是:

该窗口有一个工具栏,当按下工具栏上的按钮时,它应该显示不同的 contentView。

你考虑过使用 NSTabView 吗?它会自动处理这个问题(每个选项卡视图项都有自己的初始第一响应者出口)。

于 2013-09-16T14:11:27.140 回答
1

如果您希望在单击不同视图时您的文本字段应该成为第一响应者,那么下面的两行代码应该可以工作:-根据您的情况,使用以下几行:-

[[self window] setInitialFirstResponder:(NSView *)YourTextFieldName];
[[self window] makeFirstResponder:(NSView *)YourTextFieldName];
于 2013-09-16T11:32:05.213 回答