我有一个包含3个文本字段的简单表单(NSWindow)。 NSWindow的initialFirstResponder
'指向'第一个字段(NSTextField
)。所有三个文本字段都通过nextKeyView
循环链接。
我遇到的问题是,当我从Xcode启动应用程序时,它将专注于应用程序关闭时最后一次活动(焦点)的文本字段。
例如,如果我将文本字段命名为A,B和C,并将initialFirstResponder
设置为A.现在,如果我启动应用程序,请关注B,然后关闭应用程序,下次启动时,重点将放在B上。
为什么会这样,我将如何解决这个问题?
(对不起,如果这是一个微不足道的问题,这些是我在可可的第一步......)
修改
这是在OS X Lion 10.7.1,Xcode 4.1。
编辑2:
我找到了一种方法来“修复”这个...在主窗口(或任何窗口)XIB / NIB文件中,单击“属性检查器”,然后取消选中“可恢复”框。现在,应用程序将不会存储最后一个位置,因此initialFirstResponder
视觉将得到尊重并相应地遵循。
答案 0 :(得分:7)
欢迎来到可可! :)我怀疑这是OS X Lion中新user interface preservation功能的一部分。 (事实上,我刚刚创建了一个包含3个文本字段的简单应用程序,我也看到了这种行为。)因为windows automatically restore themselves,即使你没有实现它,你也会看到很多这种行为自动发生。这可能是可取的 - 大多数应用程序都会以这种方式工作,用户会期望它。
但是,如果确实想要禁用它,您可以通过继承NSWindow或NSTextField并覆盖-encodeRestorableStateWithCoder:
来实现。但是,我绝对建议你单独保留默认行为。
使用更多信息进行编辑:应用状态似乎存储在~/Library/Saved Application State/com.yourapp.savedState
中。在那里,您可以看到包含有关窗口信息的plist文件。其他文件似乎不易读取,但它们可能包含有关哪个字段是第一响应者的信息等。
答案 1 :(得分:0)
尽管该主题已有近10年的历史,但我将添加一个答案。引入jbandes OS X 10.7 Lion的答案大约一个月后。
在NSWindowRestoration.h
后面加上引号
@interface NSWindow (NSUserInterfaceRestoration)
/* Determines whether the window should be restored on relaunch. By default, windows with NSTitledWindowMask set in the styleMask are restorable, and windows without it set are not.
*/
@property (getter=isRestorable) BOOL restorable API_AVAILABLE(macos(10.7));