Подтвердите автозаполнение UITextview - PullRequest
8 голосов
/ 14 декабря 2011

Это кажется невозможным, но, возможно, у кого-то еще была такая же проблема.

Могу ли я автоматически принять автозаполнение или каким-то образом получить всплывающее подсказанное слово? Моя проблема в том, что я фиксирую нажатие клавиш возврата / возврата, а затем перемещаю фокус в другое текстовое представление. При нажатии Enter / Backspace текстовое представление будет игнорировать автоматически предложенное слово. Кажется, что можно принять автозаполнение только по пробелу / точке (и возврату для новой строки). С этим кодом:

 - (BOOL) textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range
                                replacementText:(NSString *)text {
    NSRange textViewRange = [textView selectedRange];

    // Handle newrow and backspace.  
    if(([text length] == 0) && (textViewRange.location== 0) && textViewRange.length==0){
        // BACKSPACE KEYSTROKE
        [delegate doSomethingWhenBackspace];
        return NO;      
    }else if ([text isEqualToString:@"\n"]){    
        // RETURN KEYSTROKE
        [delegate doSomethingWhenReturn];       
        return NO;      
    }

    return YES;
}

Я пытался программно добавить «пробел» при нажатии клавиши возврата, но это также игнорирует автоматически заполненное слово.

else if ([text isEqualToString:@"\n"]){ 
                // Tryin to accept autocomplete with no result. 
                textview.text = [textview.text stringByAppendingString:@" "];
            // RETURN KEYSTROKE
            [delegate doSomethingWhenReturn];       
            return NO;      
        }

Есть предложения?

Ответы [ 3 ]

4 голосов
/ 02 февраля 2012

Вызовите -resignFirstResponder (то есть [textView resignFirstResponder]) в текстовом представлении или текстовом поле, которое должно принимать результаты автозаполнения: UIKit изменит свойство .text, чтобы включить текст с автокоррекцией.

Если вы хотитечтобы оставить клавиатуру включенной после того, как ваш первый вид уходит в отставку первым респондентом, передайте ответственность firstResponder на следующий вид ввода текста с помощью [anotherTextView becomeFirstResponder].

0 голосов
/ 27 декабря 2011

Для возврата и пробела вы можете использовать это условие

if ([[text stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]] length]==0)
{    
 [delegate doSomethingWhenBackspace];    
 return NO;    
}
0 голосов
/ 22 декабря 2011

У меня была очень похожая проблема, я делал приложение, которое должно было читать каждую букву в текстовом представлении, и у меня были проблемы, когда автозаполнение вставляло слова, потому что оно сохраняло его, как если бы оно было одной буквой. Вы можете добавить каждый символ в массив, а затем проверить, не превышает ли длина какой-либо строки. Или вы можете добавить каждый символ, помещенный в массив, и запустить что-то вроде

NSString *string = text;
NSMutableArray *array = [NSMutableArray new];
for (int i=0; i<string.length; i++) {
 [array addObject:[string substringWithRange:NSMakeRange(i, 1)]];
}

для добавления каждого символа по отдельности, сравнивая два массива, которые вы можете определить, было ли использовано автозамена и с каким словом / с. Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...