2010-02-16 78 views
0

我在窗口中有一個NSTextField對象,當單擊一個複選框時必須禁用它。NSTextField setEnabled

我已經寫了一個IBAction來接收復選框單擊並禁用/啓用基於複選框狀態的文本字段。

[mName setEnabled: [mNameCheck state]]; 

這項工作很好的基本功能,但我發現了一些奇怪的行爲。

您更新文本字段中的一些細節,然後單擊文本框中的複選框以禁用舊內容。

例子:

  • 第1階段:申請文本有內容 「名稱」
  • 第2步:更新文本提交 內容爲 「吉里什」
  • 第3步:點擊複選框(禁用 提交的文本)
  • 階段4:文本提交禁用與 內容爲「姓名」

如果在禁用文本字段之前辭職響應者並將響應者設置爲某個其他控制器,則問題得到解決。

在我來說,我不能指定響應者複選框(它不佔用)或任何其他控制器,所以我做了一些事情像波紋管的正常工作

[mName resignFirstResponder]; 
[mName becomeFirstResponder]; 

辭職,並指派具有相同的控制器響應。

我只是想知道這個解決方案是正確的還是更好的解決方案?

+1

它們被稱爲NSTextField! –

回答

2

作爲文檔狀態,不是直接調用-resignFirstResponder-becomeFirstResponder。改爲撥打-[NSWindow makeFirstResponder:]。傳入nil是可以接受的,狀態會傳遞給窗口本身。

您可以嘗試致電-[NSWindow selectNextKeyView:],但我並不完全確定如果未找到有效的下一個關鍵視圖會發生什麼情況。試試看看。如果這不起作用,你將不得不自己調用-nextValidKeyView-makeFirstResponder

+0

[NSWindow makeFirstResponder:] - 效果很好。 感謝您的意見。 –

0

如果在Interface Builder中將文本字段設置爲連續,則只要在字段中進行更改而不是在焦點丟失時設置該字段的值。您可以編程設置該值爲[yourTextField setContinuous:YES]

+0

我在界面構建器中嘗試了「連續」功能用法的建議,甚至以編程方式,它沒有解決問題。 感謝您的建議... –