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

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

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

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

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

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

РЕДАКТИРОВАТЬ:

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


person adriaan    schedule 29.07.2011    source источник
comment
Следует ли использовать spellCheckingType вместо autocorrectionType?   -  person Jamie A    schedule 10.04.2014


Ответы (4)


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

- (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;
}
person DavidAWalsh    schedule 26.03.2014

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

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

or

[textView insertText:@" "];
[textView deleteBackward];
person bollhav    schedule 28.12.2011
comment
Это все еще работает в iOS8 - и замечает ли пользователь, что клавиатура исчезает и появляется? - person Mike S; 07.11.2014

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

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

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

person darrinm    schedule 19.04.2012

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

myTextView.autocorrectionType = UITextAutocorrectionTypeNo;
[myTextView setNeedsDisplay];
person Mark Adams    schedule 04.08.2011