我正在使用 shouldChangeCharactersInRange 作为使用即时类型搜索的方式。
但是我有一个问题,在文本字段实际更新之前 应该 调用 shouldChangeCharactersInRange :
在目标C中,我使用以下方法解决了这个问题:
-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { NSString * searchStr = [textField.text stringByReplacingCharactersInRange:range withString:string]; return YES; }
但是,我尝试用Swift编写此代码:
func textField(textField: UITextField!, shouldChangeCharactersInRange range: NSRange, replacementString string: String!) -> Bool { let txtAfterUpdate:NSString = self.projectSearchTxtFld.text as NSString txtAfterUpdate.stringByReplacingCharactersInRange(range, withString: string) self.callMyMethod(txtAfterUpdate) return true }
在获得值之前,该方法仍会被调用?
雨燕4,雨燕5
此方法不使用 NSString
NSString
// MARK: - UITextFieldDelegate extension MyViewController: UITextFieldDelegate { func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool { if let text = textField.text, let textRange = Range(range, in: text) { let updatedText = text.replacingCharacters(in: textRange, with: string) myvalidator(text: updatedText) } return true } }
注意。使用安全的文本字段时请小心。