问题:我有一个处理editingChanged
事件的方法和另一个从对象模型更新文本字段的方法。问题是,如果我修改发送事件的字段的文本,它会再次触发editingChanged并进入无限循环(仅在ios 5中)!
示例:
- (IBAction)updateFields:(UITextField *)sender {
if ([self myCustomValidation:sender]) {
... //update model
//call another method that essentially does this
field1.text = @"someformatted text"; //causes infinite loop if any field == sender
field2.text = @"some more text";
}
}
您如何解决此问题(无需将sender
传递给发送setText:
条消息的所有方法)?
答案 0 :(得分:2)
考虑实施UITextFieldDelegate
方法textField:shouldChangeCharactersInRange:replacementString:
,而不是注册editingChanged
控制事件。
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
... //update model
//call another method that essentially does this
field1.text = @"someformatted text"; //causes infinite loop any field == sender
field2.text = @"some more text";
return YES; // or NO, depending on you actions
}
根据documentation,它应该符合您的目的
只要用户键入新文本,文本字段就会调用此方法 文本字段中的字符或删除现有字符。
答案 1 :(得分:1)
不要编写自己的IBAction
方法,只需实现UITexFeild委托。
要检测修改文字,请实施shouldChangeCharactersInRange
委托。
要检测结束编辑,请实施textFieldDidEndEditing
委托。
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
//write ur code here
return YES;
}
- (void)textFieldDidEndEditing:(UITextField *)textField{
}