Как включить и отключить autocorrectionType для существующего UITextView - PullRequest
18 голосов
/ 29 июля 2011

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

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

Простое переключение типа автокоррекции, например:

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

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

EDIT:

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

Ответы [ 4 ]

10 голосов
/ 26 марта 2014

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

- (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;
}
6 голосов
/ 28 декабря 2011

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

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

или

[textView insertText:@" "];
[textView deleteBackward];
3 голосов
/ 19 апреля 2012

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

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

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

2 голосов
/ 04 августа 2011

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

myTextView.autocorrectionType = UITextAutocorrectionTypeNo;
[myTextView setNeedsDisplay];
...