2

我想检查用户是否在 textView 中退格了一个字符,是否有任何相同的字符连接它以将它们全部删除...

例如,如果我要检查的字符是“e”,我有文本“easy heeeeeello”并且用户开始按退格键,它将变为:

简单的 heeeeeello -> 简单的 heeeeeell -> 简单的 heeeeeel -> 简单的 heeeeee -> 简单的 h

代码应该检测到按下了退格键。然后它会检测哪些文本将被删除,如果该文本是一个字符(在我们的例子中是“e”),它将检查是否有更多的“e”接触那个“e”,创建一个“e”链s 并将它们全部删除。

你能帮助我吗?

4

2 回答 2

5

好的,所以我写了这段代码,它对我有用

-(BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text {
    if([text isEqualToString:@""]) {
    //Detected backspace character as the new character is @"" meaning something will be deleted

        char toDelete = [textView.text characterAtIndex:range.location];

        int duplicateCharCount = 0;
        for(int i =range.location-1; i>=0; i--) {

            if([textView.text characterAtIndex:i] == toDelete) {
                duplicateCharCount++;
            } else {
                break;
            }  
        }

        NSRange newRange = NSMakeRange(0, range.location - duplicateCharCount);
        [textView setText:[textView.text substringWithRange:newRange]];

        return NO;
    } else {
        return YES;
    }
}

我知道这不是最好的实现,但现在你知道如何进行了

希望这可以帮助

于 2013-02-05T06:27:15.900 回答
1

有点好玩,所以我刚才写了代码。该代码有效。

首先,我们应该设置 UITextView 的委托并响应 .

textView:shouldChangeTextInRange:replacementText:

根据文件

如果用户按下 Delete 键,则范围的长度为 1,并且一个空字符串对象替换该单个字符。

所以代码如下:

#pragma mark - 
#pragma mark - UITextView Delegate

- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
{
    static NSString *suffix = @"e";

    if (range.length == 1 && [text length] == 0) {
        // The user presses the Delete key.
        NSString *currentText = [textView.text substringToIndex:range.location+1];
        NSString *appendingText = [textView.text substringFromIndex:range.location+1];

        if ([currentText hasSuffix:suffix]) {
            NSRange range = [self inverseRangeOfString:currentText withSuffix:suffix];
            currentText = [currentText stringByReplacingCharactersInRange:range withString:@""];

            textView.text = [currentText stringByAppendingString:appendingText];

            return NO;
        }
    }

    return YES;
}

- (NSRange)inverseRangeOfString:(NSString *)str withSuffix:(NSString *)suffix
{
    int length = [str length];
    int lastIndex = length - 1;

    int cnt = 0;
    for (; lastIndex >= 0; --lastIndex) {
        NSString *subStr = [str substringFromIndex:lastIndex];
        if ([subStr hasPrefix:suffix]) {
            cnt++;
        } else {
            break;
        }
    }

    NSRange range = (NSRange){++lastIndex, cnt};

    return range;
}
于 2013-02-05T07:04:04.013 回答