2011-09-26 50 views
33

單擊某個按鈕時,我想顯示帶有電子郵件+密碼提示的工作表,並提供保存和取消選項。用戶界面全部設置完畢,操作已到位,表單出現並按預期取消。問題是我無法在運行時編輯任何NSTextFields;它們顯示爲禁用,並且在打開表單時每次按鍵都會播放操作系統錯誤聲音。我讀到的SO UIActionSheet是合適的,但這不是一個iOS應用程序。無法在運行時在工作表中編輯NSTextField

textfields已啓用,並且以前一直在另一個面板中工作。我確定IBAction鏈接完好無損,但我甚至不確定如何排除故障。

如何處理表單會導致健康的NSTextField拒絕輸入?

// show the sheet 
-(IBAction)showAccount:(id)sender { 
    [NSApp beginSheet:accountWindow 
     modalForWindow:prefsWindow 
     modalDelegate:self 
     didEndSelector:NULL 
      contextInfo:NULL]; 
} 

// cancel/hide the sheet 
-(IBAction)cancelAccount:(id)sender { 
    [NSApp endSheet:accountWindow]; 
    [accountWindow orderOut:nil]; 
} 

編輯:我剛剛發現,我可以右鍵單擊並將文本粘貼到每個字段中,但我無法選擇或刪除。看起來NSTextFields沒有得到關注,也沒有像往常一樣接收鍵盤輸入。我也忘記提及我的Save按鈕調用並正確執行其相關的方法。

回答

35

視圖並不一定有標題欄。

Why NSWindow without styleMask:NSTitledWindowMask can not be keyWindow?

其中規定:如果你想有一個titleless窗口能夠成爲一個重要窗口,你需要創建NSWindow的子類,並覆蓋-canBecomeKeyWindow如下:

- (BOOL)canBecomeKeyWindow { 
    return YES; 
} 

這對我有用。

+0

這對我來說很有效,並且使它更容易,因爲我由於標題欄而不必重新編碼。 – evilgoldfish

+1

這是更好的答案。我不知道他們爲什麼將這個作爲無標題窗口的默認行爲,並且是通過委託來控制的,但是我用這個方法使用了一個子類,並且工作正常。 –

+0

這個*可以*在應用程序中通過一個類別被默認設置。看到[這個答案](http://stackoverflow.com/questions/7214273/nstextfield-on-nspopover) – cbedrosian

79

事實證明,我隨意找到了解決辦法,我現在會後留給後人......

是被其用作片(NSWindow或NSPanel)視圖需要有一個標題欄。只要我在界面生成器的檢查器(窗口→外觀→標題欄複選框)中將其切換,我就會重新編譯它,並且NSTextField以突出顯示,選項卡形式並接受輸入,就像在任何其他視圖中一樣。不知道爲什麼標題欄有所作爲,但你有它。

+0

非常感謝這個答案,除了NSTokenField,我一直都有同樣的問題。我嘗試重寫所有內容,重做IB中的所有內容,最後發現標題欄是問題所在。我希望這個問題有更好的記錄。 –

+0

我也一直有這個問題!我試圖用一個不可見的透明窗口與文本字段做屏幕疊加...讓我懊惱文本字段不接受輸入......這就解釋了爲什麼!萬分感謝! –

+0

我有一個類似的問題,其中工作表上的默認NSButton不脈動。這解決了它。 – Mahouk

相關問題