显示一次后,NSTextField将不接受输入

时间:2012-03-21 01:33:20

标签: cocoa nstextfield nsviewcontroller document-based

我正在开发一个基于文档的可可应用程序。 启动界面以GarageBand为模型:显示欢迎屏幕,显示两个交替视图之一(通过分段控件切换):“创建新项目”和“浏览最近项目”。每个视图都由专用的NSViewController控制(在本例中为 NewProjectViewController RecentProjectsViewController )。

为了实现这一点,我将NSDocumentController子类化,以便在启动时显示这个“欢迎屏幕”,而不是创建一个空文档(在我的应用中,空文档没有意义,直到用户指定某些最小设置)。

在启动/初始文档创建之后,如果用户选择“创建新项目...”(即新文档),我将显示一个窗口,该窗口重用与欢迎屏幕中“新建项目”选项卡相同的界面,通过实例化相同的 NewProjectViewController 并将其视图添加到窗口。

在这两种情况下,视图控制器的视图都是从.xib创建的。视图控制器本身以编程方式实例化,并使用-addSubview将其视图添加到窗口的预先存在的子视图中:。

NewProjectViewController的视图包含几个可编辑的NSTextField实例和其他控件。

问题: 视图控制器视图中的所有NSTextField实例仅在第一次接受文本输入时;从第二次显示视图开始,尝试编辑文本将产生系统警报声。文本可以被选中(突出显示),但不会更改。此外,可以通过编程方式更改文本。

可以毫无问题地更改其他控件(弹出按钮)。

我尝试从头开始显示“新建文档”窗口(而不是欢迎屏幕),但结果是一样的:第一次工作,第二次不工作。

这是第一响应者问题吗?

1 个答案:

答案 0 :(得分:0)

好的,我修好了(虽然我仍然不知道为什么它不起作用)。

我更改了两个提示(“欢迎”屏幕和“新建项目”窗口)以作为模态窗口运行。

“欢迎”窗口调用 - “退出”上的[NSApp abortModal]和“选择”上的 - [NSApp stopModal]。 “新建项目”窗口调用 - “取消”上的[NSApp abortModal]和“创建”上的 - [NSApp stopModal]。

在Document控制器方面,我检查每个窗口控制器,看看用户选择了什么,并采取相应的行动(创建新文档,打开最近的文档,什么也不做,退出应用程序等)。