2

ユーザーがtextView内の文字をバックスペースしているかどうかを確認したいのですが、同じ文字を接続してすべてを削除するために同じ文字が存在するかどうかを確認します...

たとえば、チェックしている文字が「e」の場合、「easy heeeeeello」というテキストがあり、ユーザーがバックスペースを押し始めると、次のようになります。

簡単なheeeeeello->簡単なheeeeeell->簡単なheeeeeel->簡単なheeeeee->簡単なh

コードは、バックスペースが押されたことを検出する必要があります。次に、どのテキストが削除されるかを検出し、そのテキストが文字(この場合は「e」)である場合、その「e」に接触する「e」がさらにあるかどうかをチェックして、「e」のストランドを作成します。 sそしてそれらをすべて削除します。

手伝って頂けますか?

4

2 に答える 2

5

OK、それで私はこのコードを書きました、そしてそれは私のために働きます

-(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になり、空の文字列オブジェクトがその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 に答える