假设我有以下代码:
IBOutlet UITextField* nameTextField; IBOutlet UILabel* greetingLabel;
greetingLabel
一旦用户按任意键,我想要读取"Hello [nameTextField]".
我需要的基本上是iPhone相当于Cocoa委托方法controlTextDidChange
.
的textField:shouldChangeCharactersInRange:
委托方法被称为每个键击发生时:
- (BOOL) textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
字符串参数返回按下的字符.然而,实际textField
的值(nameTextField.text
)仍为空白.
我在这里错过了什么?(我想nameTextField
反映用户到目前为止输入的确切字符串).
事实证明,最简单的方法是使用Interface Builder:
添加一个IBAction(对于ViewController,比如说,在这种情况下)
在Interface Builder中的UITextField上按住Ctrl键单击(或右键单击)
将"编辑已更改"事件连接到第一步中添加的文件所有者的IBAction.
就像一个魅力:)(我不敢相信我花了很多天在这上面,现在意识到解决方案比我想象的要简单得多:P)
您可以在文本字段上注册事件UIControlEventEditingChanges的操作:
[nameTextField addTarget:self action:@selector(updateLabelUsingContentsOfTextField:) forControlEvents:UIControlEventEditingChanged];
...
// TODO: error checking - (void)updateLabelUsingContentsOfTextField:(id)sender { greetingLabel.text = [NSString stringWithFormat:@"Hello %@", ((UITextField *)sender).text]; }
UITextField
UITextFieldTextDidChange
如果您注册文本,则每次文本更改时都会触发通知.只需注册该通知,并在通知调用的方法中更改标签的文本.
要添加到此,传递给通知处理程序的对象将具有文本UITextField
.
希望有所帮助.