我有一个带有3个文本字段的简单表单(NSWindow)。 NSWindow的initialFirstResponder
是“指向”第一个字段(NSTextField
)。所有这三个文本字段都通过nextKeyView
彼此循环链接。
我遇到的问题是,当我从Xcode启动应用程序时,它将集中在应用程序关闭时最后一次处于 Activity 状态(焦点对准)的文本字段。
因此,例如,如果我命名文本字段A,B和C,并且initialFirstResponder
设置为A。现在,如果我启动该应用程序,将焦点放在B上,然后关闭该应用程序,则下次启动它时,焦点将放在B上。
为什么会这样,我将如何解决呢?
(很抱歉,如果这是一个琐碎的问题,这些是我制作 cocoa 的第一步...)
编辑:
这是在OS X Lion 10.7.1,Xcode 4.1上。
编辑2:
我找到了一种“修复”此问题的方法...在主窗口(或与此相关的任何窗口)的XIB/NIB文件中,单击“属性检查器”,然后取消选中“可还原”框。现在,应用程序将不存储最后位置,因此initialFirstResponder
看到的内容将得到尊重并相应地遵循。
最佳答案
欢迎来到 cocoa ! :)我怀疑这是OS X Lion新user interface preservation功能的一部分。 (实际上,我刚刚创建了一个包含3个文本字段的简单应用程序,我也看到了这种行为。)因为windows automatically restore themselves,即使没有实现,您也会看到很多这种行为自动发生。这可能是合乎需要的-大多数应用程序都将以这种方式工作,并且用户会期待它。
但是,如果您确实要禁用它,则可以通过将NSWindow或NSTextField子类化并覆盖 -encodeRestorableStateWithCoder:
来实现。但是,我绝对建议您不要使用默认行为。
进行一些进一步的编辑:应用程序状态似乎存储在~/Library/Saved Application State/com.yourapp.savedState
中。在这里,您可以看到带有有关窗口信息的plist文件。其他文件似乎不容易阅读,但是它们可能包含有关哪个字段是第一响应者的信息,等等。
关于cocoa - 为什么设置initialFirstResponder无效?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7157853/