我需要识别已删除的字符。例如,当我删除一个字符“@”时,我需要执行一些操作。有没有简单的方法来做到这一点?或者我是否需要将最近输入的字符保留在变量中并检查shouldChangeCharactersInRange中的range.length == 0?
提前致谢。
答案 0 :(得分:5)
在我看来,它应该是这样的:
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
NSString *textToChange = [[textField text] substringWithRange:range];
NSRange rangeOld = [textToChange rangeOfString:@"@"];
NSRange rangeNew = [string rangeOfString:@"@"];
if (rangeOld.location != NSNotFound && rangeNew.location == NSNotFound ) {
[self userDidRemoveAtSign];
}
return YES;
}
说明:是的,当用户删除“@”符号时,userDidRemoveAtSign
是您的自定义方法。此代码驻留在UITextField 委托中。每当用户在UITextField中更改文本,删除,替换或附加字符时,textfield都会发送此消息
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
代表。在这个方法中,我检查替换文本中是否包含@符号,以及是否包含在替换文本中。
答案 1 :(得分:1)
是的,正如您所说,您必须将最后一组字符保留在NSString中,然后在文本更改时将其与新字符串进行比较
答案 2 :(得分:0)
你可以通过这种方式在swift中执行此操作,您将获得删除的字符
让strDeletedChar =(textView.text as NSString).substringWithRange(range)
答案 3 :(得分:0)
您可以在UITextView Delegate方法中捕获deletede char:
- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text{
NSString *deletedChar = [textView.text substringWithRange:range];
if ([deletedChar isEqualToString:@"@"]) {
// do something
return YES;
}else{
// do something
return YES;
}
}
答案 4 :(得分:0)
UITextView代表Swift 5版本:
func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool {
guard let txt = textView.text, let txtRange = Range(range, in: txt) else {
return false
}
let subString: Substring = txt[txtRange]
if subString == "(searchString)" {
// do something
return true
}
}