2

我需要识别已删除的字符。例如,当我删除一个字符“@”时,我需要执行一些操作。有什么简单的方法可以做到这一点?或者我是否需要将最近键入的字符保留在变量中并检查 shouldChangeCharactersInRange 中的 range.length == 0?

提前致谢。

4

5 回答 5

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 中的文本、删除、替换或附加字符时,文本字段都会发送此消息

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string

委托。在这种方法中,我检查 @ 符号是否包含在替换文本中,以及它是否包含在替换文本中。

于 2012-06-15T10:50:29.033 回答
1

是的,正如您所说,您必须将最后一组字符保留在 NSString 中,然后在文本更改时将其与新字符串进行比较

于 2012-06-15T10:30:49.297 回答
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
    }
}
于 2019-09-11T03:58:25.027 回答
0

您可以通过这种方式快速执行此操作,您将获得已删除的字符

让 strDeletedChar = (textView.text as NSString).substringWithRange(range)

于 2016-04-14T06:04:39.137 回答
0

您可以在 UITextView Delegate 的方法中捕获已删除的字符:

- (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;
   }
}
于 2017-06-24T04:58:31.317 回答