2012-03-21 51 views
0

我正在開發基於文檔的可可應用程序。 啓動界面在GarageBand後建模:顯示一個歡迎界面,顯示兩個交替視圖(通過分段控件切換)中的一個:「創建新項目」和「瀏覽最近項目」。每個視圖都由專用的NSViewController控制(在這種情況下,NewProjectViewControllerRecentProjectsViewController)。NSTextField在顯示一次後不會接受輸入

爲了達到這個目的,我創建了NSDocumentController子類,以便在啓動時顯示這個「歡迎屏幕」,而不是創建一個空白文檔(空白文檔在我的應用中沒有意義,直到用戶指定了某些最小設置)。

啓動/初始文檔創建後,如果用戶選擇「創建新項目...」(即新文檔),我將顯示一個窗口,它重用與歡迎屏幕中的「新建項目」選項卡相同的界面通過實例化相同的NewProjectViewController並將其視圖添加到窗口。

在這兩種情況下,視圖控制器的視圖都是從.xib創建的。視圖控制器本身以編程方式實例化,並使用-addSubview:將其視圖添加到窗口的預先存在的子視圖中。

NewProjectViewController的視圖包含幾個可編輯的NSTextField實例和其他控件。

問題: 視圖控制器視圖中的所有NSTextField實例只會在第一次接受文本輸入;從第二次顯示視圖開始,嘗試編輯文本將產生系統警報聲。文字可以被選中(突出顯示),但沒有改變。此外,文本可以通過編程方式進行更改。

其他控件(彈出按鈕)可以更改沒有問題。

我試着從頭開始顯示「新建文檔」窗口(而不是歡迎屏幕),但結果是一樣的:第一次工作,第二次沒有。

這是第一響應者問題嗎?

+0

還,使用10.6雪豹。 – 2012-03-30 05:36:32

回答

0

好吧,我解決了它(雖然我仍然不知道它爲什麼不工作)。

我改變了兩個提示('歡迎'屏幕和'新建項目'窗口)作爲模態窗口運行。

'歡迎'窗口調用 - '選擇'上的'退出'和[NSApp stopModal]上的[NSApp abortModal]。 '新建項目'窗口調用 - '取消'上的[NSApp abortModal]和'創建'上的 - [NSApp stopModal]。

在文檔控制器的身邊,我檢查每個窗口控制器清楚地看到用戶選擇什麼,並採取相應的行動(創建一個新文檔,打開最近的一份文件,什麼也不做,退出程序等)

+0

實際上,從設計的角度來看,模態窗口比我之前做的更有意義。 – 2012-04-14 13:19:36

+0

我仍然很想知道在什麼情況下NSTextField會發出系統警報聲。這將有助於診斷。我到處搜查都無濟於事...... – 2012-04-14 13:20:53