我有一张桌子。在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/