2008-12-23 75 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