2010-07-23 23 views
8

UITextAutocorrectionTypeNo nie działa dla mnie.Programowanie iPhone'a: ​​Dezaktywuj sprawdzanie pisowni w UITextView

Pracuję nad aplikacją krzyżówkową dla iPhone'a. Pytania są w UITextViews i używam UITextFields dla wprowadzania danych przez użytkownika każdej litery. Dotykając pytania (UITextView), TextField dla pierwszego znaku odpowiedzi staje sięFirstResponder.

Wszystko działa dobrze, ale widoki UITextViews wciąż sprawdzają pisownię i oznaczają niewłaściwe słowa w pytaniu, , nawet jeśli ustawię je jako UITextAutocorrectionTypeNo.

//init of my Riddle-Class 

... 

for (int i = 0; i < theQuestionSet.questionCount; i++) { 

    Question *myQuestion = [theQuestionSet.questionArray objectAtIndex:i]; 
    int fieldPosition = theQuestionSet.xSize * myQuestion.fragePos.y + myQuestion.fragePos.x; 
CrosswordTextField *myQuestionCell = [crosswordCells objectAtIndex:fieldPosition]; 
questionFontSize = 6; 
CGRect textViewRect = myQuestionCell.frame; 

UITextView *newView = [[UITextView alloc] initWithFrame: textViewRect]; 
newView.text = myQuestion.frageKurzerText; 
newView.backgroundColor = [UIColor colorWithRed: 0.5 green: 0.5 blue: 0.5 alpha: 0.0 ]; 
newView.scrollEnabled = NO; 
newView.userInteractionEnabled = YES; 
[newView setDelegate:self]; 
newView.textAlignment = UITextAlignmentLeft; 
newView.textColor = [UIColor whiteColor]; 
newView.font = [UIFont systemFontOfSize:questionFontSize]; 
newView.autocorrectionType = UITextAutocorrectionTypeNo; 
[textViews addObject:newView]; 
[zoomView addSubview:newView]; 
[newView release]; 
} 

... 

//UITextView delegate methode in my Riddle-Class 

-(BOOL)textViewShouldBeginEditing:(UITextView *)textView { 

    textView.autocorrectionType = UITextAutocorrectionTypeNo; 

    for (int i = 0; i < [questionSet.questionArray count]; i++) { 
     if ([[[questionSet.questionArray objectAtIndex:i] frageKurzerText] isEqualToString:textView.text]) { 
     CrosswordTextField *tField = [self textfieldForPosition: 
      [[questionSet.questionArray objectAtIndex:i] antwortPos]]; 
     markIsWagrecht = [[questionSet.questionArray objectAtIndex:i] wagrecht]; 
     if ([tField isFirstResponder]) [tField resignFirstResponder]; 
      [tField becomeFirstResponder]; 
     break; 
     } 
} 
return NO; 
} 

Nie nazywam UITextView w żadnym innym miejscu.

Odpowiedz

0

Masz rozwiązanie, ale tak naprawdę nie powinno być. Jeśli ktoś wie coś lepszego, proszę powiedz mi.

Autokorekcja wykonuje się po pierwszym dotknięciu. Przydzielam więc nowy UITextView i ustawię go jak dotknięty TextView. Następnie zastępuję dotknięty tekstView moim nowym tekstem. Tak więc każda instancja UITextView może być dotknięta tylko raz i znika. :)

//UITextView delegate method in my Riddle-Class 

-(BOOL)textViewShouldBeginEditing:(UITextView *)textView { 

    ...CODE FROM FIRST POST HERE... 

    // ADDED CODE: 
    for (int i = 0; i < [textViews count]; i++) { 
     if (textView == [textViews objectAtIndex:i]) { 
      UITextView *trickyTextView = [[UITextView alloc] initWithFrame:textView.frame]; 
      trickyTextView.text = textView.text; 
      trickyTextView.font = textView.font; 
      trickyTextView.autocorrectionType = UITextAutocorrectionTypeNo; 
      trickyTextView.textColor = textView.textColor; 
      trickyTextView.backgroundColor = textView.backgroundColor; 
      trickyTextView.delegate = self; 
      trickyTextView.scrollEnabled = NO; 
      [textViews replaceObjectAtIndex:i withObject:trickyTextView]; 
      [textView removeFromSuperview]; 
      [zoomView addSubview:trickyTextView]; 
      [trickyTextView release]; 
      break; 
     } 
    } 
    return NO; 
} 
20

Miałem ten sam problem. Rozwiązanie jest bardzo proste, ale nie udokumentowane: Możesz zmienić tylko właściwości zdefiniowane w protokole UITextInputTraits, a dany UITextView NIE jest pierwszym respondentem. Poniższe wiersze naprawiły to dla mnie:

[self.textView resignFirstResponder]; 
self.textView.autocorrectionType = UITextAutocorrectionTypeNo; 
[self.textView becomeFirstResponder]; 

Mam nadzieję, że to pomoże komuś.

8

Jeden potencjalnie pomocne wskazówka wynikające z Engin Kurutepe „s odpowiedź:

Jeśli podklasy UITextView, można zastąpić UITextInputTraits w realizacji podklasa becomeFirstResponder, coś takiego:

-(BOOL)becomeFirstResponder { 
    self.spellCheckingType = UITextSpellCheckingTypeNo; 
    self.autocorrectionType = UITextAutocorrectionTypeNo; 
    self.autocapitalizationType = UITextAutocapitalizationTypeNone; 
    return [super becomeFirstResponder]; 
} 

Nie nie ma wtedy potrzeby wyraźnego zmieniania zmian cech.

Powiązane problemy