0

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

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

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

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

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

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

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

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

这是第一响应者的问题吗?

4

1 回答 1

0

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

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

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

在 Document 控制器方面,我检查每个窗口控制器以查看用户选择的具体内容并采取相应措施(创建一个新文档、打开一个最近的文档、什么都不做、退出应用程序等)

于 2012-04-14T13:18:59.107 回答