Подтвердить что ты не робот

Как включить и отключить autocorrectionType для существующего UITextView

У меня есть UITextView в моем приложении для iPhone, для которого я хочу иметь возможность переключать autocorrectionType.

Когда пользователь редактирует текстовое представление, я хочу, чтобы autocorrectionType был установлен в UIAutocorrectionTypeYes. Когда текстовое представление не редактируется, я хочу, чтобы параметр autocorrectionType был установлен в UIAutocorrectionTypeNo (потому что я не хочу, чтобы какой-либо из красноцветных подчеркиваний, созданных автокоррекцией, был видимым)

Просто переключите autocorrectionType следующим образом:

myTextView.autocorrectionType = UITextAutocorrectionTypeYes;
myTextView.autocorrectionType = UITextAutocorrectionTypeNo;

Кажется, не работает. Существуют ли ограничения на то, когда я могу переключить autocorrectionType или в каких ситуациях вступает в силу измененный тип autocorrectionType?

EDIT:

Чтобы уточнить: Нет проблем с настройкой autocorrectionType при инициализации UITextView. Проблема возникает, когда я хочу изменить autocorrectionType для существующего UITextView. В моем случае я хочу дать пользователям преимущество автокоррекции при редактировании UITextView, но не хочу, чтобы какие-либо орфографические ошибки указывались с красными пунктирными подчеркиваниями, когда UITextView не редактируется - отчасти потому, что я также экспортирую UIView, содержащий UITextView как изображение. Проблема в том, что просто изменение значения моего свойства autocorrectionType моего UITextView не работает.

4b9b3361

Ответ 1

Вот простой способ сделать это для сценария экспорта изображений:

- (BOOL)textViewShouldBeginEditing:(UITextView *)textView
{
    // Turn spell check on
    textView.autocorrectionType = UITextAutocorrectionTypeYes;
    return YES;
}


- (BOOL)textViewShouldEndEditing:(UITextView *)textView
{
    // Turn spell check off and clean up red squiggles.
    textView.autocorrectionType = UITextAutocorrectionTypeNo;
    NSString *currentText = textView.text;
    textView.text = @"";
    textView.text = currentText;
    return YES;
}

Ответ 2

Сначала вы можете сначала скрыть клавиатуру, а затем снова отобразить ее. Также обновите uitextview. Если [UITextView setNeedsDisplay] не работает для вас, попробуйте [UITextView insertText:], а затем [UITextView deleteBackward]

[textView resignFirstResponde];
textView.autocorrectionType = UITextAutocorrectionTypeNo;
[textView becomeFirstResponder];
[textView setNeedsDisplay];

или

[textView insertText:@" "];
[textView deleteBackward];

Ответ 3

В дополнение к изменению типа автокоррекции в UITextAutoCorrectionNo UITextView должен быть вынужден переоценить его состояние коррекции. setNeedsRedraw недостаточен, но сам по себе настраивает текст, например.

textView.autocorrectionType = UITextAutocorrectionTypeNo;
textView.text = textView.text;

заставляет красные пунктирные линии уходить. ПРИМЕЧАНИЕ. Это обходное решение основывается на недокументированном поведении и не гарантируется работа над будущими выпусками iOS.

Ответ 4

Попробуйте вызвать -setNeedsDisplay в текстовом представлении после изменения autocorrectionType. Это заставит текстовое представление перерисовать и, надеюсь, очистит красные подчеркивания.

myTextView.autocorrectionType = UITextAutocorrectionTypeNo;
[myTextView setNeedsDisplay];