shouldChangeCharactersInRange

shouldChangeCharactersInRange

我有一张桌子。在cellForRowAtIndexPath中,我有一个单元格,在该单元格中有UITextField。我将文本字段的委托设置为:cell.textField.delegate = self;。我需要在第三个字符上调用我的API。因此,当用户在文本字段中键入3个字符时,因此会调用API shouldChangeCharactersInRange

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
   if (textField.text.length >= 2) {
     NSString *substring = [NSString stringWithString:textField.text];
     substring = [substring
                 stringByReplacingCharactersInRange:range withString:string];
    [API CALLED WITH BLOCK WITH TEXTFIELD TEXT AS PARAMETER:substring];
 }
  return YES;
}

问题是,例如,当我键入“abc”时,shouldChangeCharactersInRange首次被调用,参数为“abc”。第二个之后,再次调用shouldChangeCharactersInRange,我的文本字段又添加了一个我没有键入的字符,它总是被复制的最后一个字符。因此,在此示例中,它发送“abcc”。你知道是什么问题吗?

最佳答案

在该委托方法中设置断点有时会导致该方法被触发两次。尝试删除此处或您的API方法中遇到的任何断点,然后再次进行测试。

这很容易复制。创建一个新项目,添加一个UITextField出口,并将委托设置为您的控制器。在您的控制器中实现textField:shouldChangeCharactersInRange:,并在NSLog语句或其他内容以及return YES上设置断点。有时,在告诉调试器继续运行之后,将生成第二个击键,并再次击中您的委托方法。

关于ios - UITextField shouldChangeCharactersInRange是否触发两次?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32567720/

10-08 20:40