Pytanie Jak włączać i wyłączać funkcję autokorekty dla istniejącego UITextView


Mam UITextView w mojej aplikacji na iPhone'a, dla której chcę mieć możliwość przełączania typu autocorrectionType.

Gdy użytkownik edytuje widok tekstowy, chcę ustawić parametr autokorektyType na UIAutocorrectionTypeYes. Jeśli widok tekstowy nie jest edytowany, chcę, aby parametr autokorektRozostał ustawiony na UIAutocorrectionTypeNo (ponieważ nie chcę, aby były widoczne czerwone podkreślenia generowane przez autokorektę)

Po prostu przełączanie typu autocorrectionType w ten sposób:

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

Wydaje się nie działać. Czy istnieją ograniczenia dotyczące przełączania parametru autokorektyType lub w jakich sytuacjach zmieniony typ autokorekty zaczyna obowiązywać?

EDYTOWAĆ:

W celu wyjaśnienia: Podczas inicjowania UITextView nie ma problemów z ustawianiem parametru autocorrectionType. Problem pojawia się, gdy chcę zmienić typ autokorekty dla istniejącego UITextView. W moim przypadku chcę dać użytkownikom przewagę autokorekcji podczas edytowania UITextView, ale nie chcę, aby błędy pisowni wskazywały czerwone kropkowane podkreślenia, gdy UITextView nie jest edytowany - częściowo dlatego, że eksportuję również UIView zawierający UITextView jako obraz. Problem polega na tym, że zmiana wartości właściwości autocorrectionType mojego UITextView nie działa.


18
2017-07-29 01:30


pochodzenie


Czy zamiast funkcji autocorrectionType należy używać funkcji spellCheckingType? - Jamie A


Odpowiedzi:


Oto prosty sposób na zrobienie tego w przypadku scenariusza eksportu obrazów:

- (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;
}

10
2018-03-26 04:24





Możesz spróbować najpierw ukryć klawiaturę, a następnie wyświetlić ją ponownie. Zaktualizuj również widok uitext. Jeśli [UITextView setNeedsDisplay] nie działa, spróbuj [UITextView insertText:], a następnie [UITextView deleteBackward]

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

lub

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

6
2017-12-28 14:11



Czy to nadal działa w iOS8 - i czy użytkownik zauważa, że ​​klawiatura znika i pojawia się? - Mike S


Oprócz zmiany typu autokorekty na UITextAutoCorrectionNo, UITextView musi zostać zmuszony do ponownej oceny jego stanu korekcji. setNeedsRedraw jest niewystarczające, ale ustawia tekst dla siebie, np.

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

sprawia, że ​​czerwone linie przerywane znikają. UWAGA: to obejście polega na nieudokumentowanym zachowaniu i nie ma gwarancji działania w przyszłych wersjach systemu iOS.


3
2018-04-19 18:37





Spróbuj zadzwonić -setNeedsDisplay w widoku tekstowym po zmianie autocorrectionType. Zmusi to do przerysowania widoku tekstu i miejmy nadzieję, że usunie czerwone podkreślenia.

myTextView.autocorrectionType = UITextAutocorrectionTypeNo;
[myTextView setNeedsDisplay];

2
2017-08-04 02:58



Niestety to nie działa. - adriaan