2008-12-23 67 views
103

比方說,我有以下代碼:在輸入按鍵時獲取UITextField的值?

IBOutlet UITextField* nameTextField; 
IBOutlet UILabel* greetingLabel; 

我想要greetingLabel讀「你好[nameTextField]」只要用戶按下任意鍵。

我基本上需要的是Cocoa代理方法controlTextDidChange的iPhone等價物。

textField:shouldChangeCharactersInRange:委託方法被稱爲每個鍵擊發生時:

- (BOOL)    textField:(UITextField *)textField 
    shouldChangeCharactersInRange:(NSRange)range  
       replacementString:(NSString *)string 

字符串參數返回被按下的字符。然而,實際的textField的值(nameTextField.text)仍然空白。

我在這裏錯過了什麼? (我想nameTextField反映用戶到目前爲止輸入的確切字符串)。

回答

189

事實證明,要做到這一點最簡單的方法是使用Interface Builder:

  • 添加IBAction爲(到ViewController,比方說,在這種情況下)
  • 按Ctrl鍵(或右鍵單擊)在界面生成器中的UITextField中
  • 將「Editing Changed」事件連接到第一步中添加的文件所有者的IBAction。

就像一個魅力:)(我不能相信我在這度過了許多天,現在認識到解決辦法就簡單多了,比我想象的要:P)

101

,你可以註冊在文本字段事件UIControlEventEditingChanges一個動作:

[nameTextField addTarget:self action:@selector(updateLabelUsingContentsOfTextField:) forControlEvents:UIControlEventEditingChanged]; 

...

// TODO: error checking 

- (void)updateLabelUsingContentsOfTextField:(id)sender { 

    greetingLabel.text = [NSString stringWithFormat:@"Hello %@", ((UITextField *)sender).text]; 

} 
+0

是否有辦法使用Interface Builder指定這個? – PlagueHammer 2008-12-23 08:24:41

+0

啊哈..在下面的答案中有詳細說明。 – PlagueHammer 2008-12-23 23:58:38

10

UITextField有一個通知UITextFieldTextDidChange這將在每次發射文本的變化,如果你註冊它。只需註冊該通知和通知所調用的方法,即可更改標籤的文本。

要添加到此,傳遞給您的通知處理程序的對象將具有UITextField的文本。

希望有所幫助。

+0

這爲我節省了一天 - 謝謝! – mpemburn 2013-02-08 00:58:51