Rya*_*yan 67 objective-c ios nsrange uitextfielddelegate swift
我正在使用shouldChangeCharactersInRange作为使用动态类型搜索的一种方式.
但是我遇到了问题,在文本字段实际更新之前调用了更改角色的内容:
在Objective C中,我使用以下方法解决了这个问题:
-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
NSString * searchStr = [textField.text stringByReplacingCharactersInRange:range withString:string];
return YES;
}
Run Code Online (Sandbox Code Playgroud)
但是,我试过在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
}
Run Code Online (Sandbox Code Playgroud)
在得到值之前,该方法仍会被调用?
Vya*_*lav 123
斯威夫特4
此方法不使用 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
}
}
Run Code Online (Sandbox Code Playgroud)
注意.使用安全文本字段时要小心.
Mik*_*ard 72
stringByReplacingCharactersInRange 返回一个新字符串,那么如何:
func textField(textField: UITextField!, shouldChangeCharactersInRange range: NSRange, replacementString string: String!) -> Bool {
if let text = textField.text as NSString? {
let txtAfterUpdate = text.replacingCharacters(in: range, with: string)
self.callMyMethod(txtAfterUpdate)
}
return true
}
Run Code Online (Sandbox Code Playgroud)
Mob*_*Dan 40
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
let textFieldText: NSString = (textField.text ?? "") as NSString
let txtAfterUpdate = textFieldText.replacingCharacters(in: range, with: string)
callMyMethod(txtAfterUpdate)
return true
}
func textFieldShouldClear(_ textField: UITextField) -> Bool {
callMyMethod("")
return true
}
Run Code Online (Sandbox Code Playgroud)
func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool {
let textFieldText: NSString = textField.text ?? ""
let txtAfterUpdate = textFieldText.stringByReplacingCharactersInRange(range, withString: string)
callMyMethod(txtAfterUpdate)
return true
}
func textFieldShouldClear(textField: UITextField) -> Bool {
callMyMethod("")
return true
}
Run Code Online (Sandbox Code Playgroud)
虽然该textField.text属性是可选的,但不能设置为nil.将其设置为nil将更改为空字符串UITextField.在上面的代码中,这就是为什么textFieldText设置为空字符串if if textField.text为nil(通过nil coalescing运算符??).
实现textFieldShouldClear(_:)处理文本字段的清除按钮可见和点击的情况.
And*_*eev 11
在Swift 3中,它看起来像这样:
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
let text: NSString = (textField.text ?? "") as NSString
let resultString = text.replacingCharacters(in: range, with: string)
return true
}
Run Code Online (Sandbox Code Playgroud)