【问题标题】:NSTextField won't accept input after displaying onceNSTextField 显示一次后不接受输入
【发布时间】:2012-03-21 01:33:19
【问题描述】:

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

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

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

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

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

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

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

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

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

【问题讨论】:

  • 另外,使用 10.6 Snow Leopard。

标签: cocoa nstextfield nsviewcontroller document-based


【解决方案1】:

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

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

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

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

【讨论】:

  • 实际上,从设计的角度来看,模态窗口比我以前做的更有意义。
  • 我仍然很想知道在什么情况下 NSTextField 会发出系统警报声。这将有助于诊断。我到处找都无济于事……
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-22
  • 2013-01-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-20
相关资源
最近更新 更多