Замена текста в UITextView - PullRequest
3 голосов
/ 27 октября 2009

Я пытаюсь написать небольшое концептуальное приложение, которое читает поток символов при вводе пользователем в UITextView, и при вводе определенного слова оно заменяется (что-то вроде автокоррекции).

Я посмотрел на использование -

(BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text;

но пока мне не повезло. может кто-нибудь дать мне подсказку.

С благодарностью!

1010 * Дэвид *

1 Ответ

11 голосов
/ 27 октября 2009

Это правильный метод. Его объект установлен как делегат UITextView ?

ОБНОВЛЕНИЕ:
-Исправлено выше, чтобы сказать "UITextView" (у меня был "UITextField" ранее)
-добавленный пример кода ниже:

Эта реализация метода входит в объект делегата UITextView (например, его контроллер представления или делегат приложения):

// replace "hi" with "hello"
- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text {

    // create final version of textView after the current text has been inserted
    NSMutableString *updatedText = [[NSMutableString alloc] initWithString:textView.text];
    [updatedText insertString:text atIndex:range.location];

    NSRange replaceRange = range, endRange = range;

    if (text.length > 1) {
        // handle paste
        replaceRange.length = text.length;
    } else {
        // handle normal typing
        replaceRange.length = 2;  // length of "hi" is two characters
        replaceRange.location -= 1; // look back one characters (length of "hi" minus one)
    }

    // replace "hi" with "hello" for the inserted range
    int replaceCount = [updatedText replaceOccurrencesOfString:@"hi" withString:@"hello" options:NSCaseInsensitiveSearch range:replaceRange];

    if (replaceCount > 0) {
        // update the textView's text
        textView.text = updatedText;

        // leave cursor at end of inserted text
        endRange.location += text.length + replaceCount * 3; // length diff of "hello" and "hi" is 3 characters
        textView.selectedRange = endRange; 

        [updatedText release];

        // let the textView know that it should ingore the inserted text
        return NO;
    }

    [updatedText release];

    // let the textView know that it should handle the inserted text
    return YES;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...