1

问题:我有一个处理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:消息的方法)?

4

2 回答 2

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
}

根据文档,它应该服务于您的目的

每当用户在文本字段中键入新字符或删除现有字符时,文本字段都会调用此方法。

于 2013-03-27T20:33:25.190 回答
1

无需编写自己的IBAction 方法,只需实现 UIExFeild 委托即可。

要检测修改文本,请实现shouldChangeCharactersInRange委托。

要检测结束编辑,请实现textFieldDidEndEditing委托。

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range      replacementString:(NSString *)string
{
  //write ur code here
  return YES;
}

- (void)textFieldDidEndEditing:(UITextField *)textField{

}
于 2013-03-27T20:36:14.557 回答