2011-07-29 9 views
18

Mam UITextView w mojej aplikacji na iPhone'a, dla której chcę móc przełączać typ autokorekty.Jak włączać i wyłączać autokorektęType dla istniejącego UITextView

Gdy użytkownik edytuje widok tekstowy, chcę, aby typ autokorektyType był ustawiony na UIAutocorrectionTypeYes. Gdy widok tekst nie jest edytowany, chcę autocorrectionType być ustawiony na UIAutocorrectionTypeNo (bo nie chcę żadnej z czerwonych przerywana podkreślenia generowanych przez autokorekty będzie widoczny)

Wystarczy przełączanie autocorrectionType takiego :

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

Nie wydaje się działać. Czy istnieją ograniczenia dotyczące przełączania metody autocorrectionType lub sytuacji, w której zmieniony typ autokorekty zaczyna obowiązywać?

EDIT:

Dla wyjaśnienia: Brak kwestie ustawianie autocorrectionType podczas inicjalizacji UITextView. 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 po prostu zmiana wartości właściwości autocorrectionType mojego UITextView nie działa.

+0

należy używać spellCheckingType zamiast autocorrectionType? –

Odpowiedz

10

Oto prosty sposób to zrobić dla scenariusza eksportu obrazu:

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

Spróbuj wywołać -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]; 
+1

Niestety to nie rozwiązuje problemu. – adriaan

6

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

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

lub

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

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

3

Poza zmianą rodzaju autokorekty do UITextAutoCorrectionNo The UITextView musi być zmuszony do ponownej oceny jego stanu korekcji. setNeedsRedraw jest niewystarczające, ale ustawia tekst dla siebie, np.

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

powoduje, ż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.

Powiązane problemy