Spellcheck in UITextView deaktivieren

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Spellcheck in UITextView deaktivieren

    Hallo,

    mein Problem ist bestimmt mal wieder verhältnissmäßig trivial.
    Ich arbeite gerade an einer iPhone App (OS4), die mehrere UITextViews beinhaltet.
    Die TextViews sollen nur Text mehrzeilig anzeigen und
    bei einem Touche ein zugehöriges UITextField markieren.

    Funktioniert auch soweit, hier der Vollständigkeit halber der Code,
    auch wenn ich nicht glaube, dass es damit zu tun hat:

    Quellcode

    1. -(BOOL)textViewShouldBeginEditing:(UITextView *)textView {
    2. [tField becomeFirstResponder];
    3. return NO;
    4. }


    Mein Problem ist, dass nach dem Touche auf den UITextView wohl ein Spellcheck started,
    der mir Fehler im UITextView rot unterstreicht. Ist an dieser Stelle aber total unangebracht.
    Kann ich das auf einfache weise Deaktivieren? Hab mich schon halb tot gesucht.
    Ein einfacher Setter scheints jedenfalls nicht zu sein.
    dealloc {
    [myLeak retain];
    }
  • jakez schrieb:



    Quellcode

    1. textfield.autocorrectionType = UITextAutocorrectionTypeNo;


    Das hier sollte dein Freund sein ;)


    Das dachte ich erst auch und UITextAutocorrectionTypeNo funktioniert auch, wenn ich mir ein neues Projekt anlege, in dem ich einfach nur einen UITextView habe.

    Doch bei meinen programatisch erstellten TextViews will es nicht funktionieren.

    Vieleicht sollte ich dann doch mal mehr Details auspacken.
    Ich arbeite an einem Kreuzworträtsel für das iPhone.
    Die Fragen stehen in UITextViews, die Antwort-Buchstaben werden in UITextFields eingetragen.
    Bei einem klick auf eine Frage, soll das UITextField den firstResponder bekommen, das für den ersten Buchstaben der Antwort steht.

    Funktioniert alles, nur wie gesagt, ich bekomme den Spell Check nicht aus den TextViews.

    Ein paar ausführlichere Auszüge meines Quellcodes:

    Quellcode

    1. // aus der init-Methode meiner Riddle-Klasse
    2. ...
    3. for (int i = 0; i < theQuestionSet.questionCount; i++) {
    4. /*
    5. Die Schleife durchläuft alle Fragen des Kreuzworträtsels
    6. ________________________________________________________
    7. theQuestionSet enthält alle Fragen des Kreuzworträtsels
    8. myQuestion ist ein Objekt das alle Infos zu einer Frage enthält
    9. myQuestionCell ist das Frage-Feld, auf das der UITextView mit dem Frage-Text gesetzt wird
    10. */
    11. Question *myQuestion = [theQuestionSet.questionArray objectAtIndex:i];
    12. int fieldPosition = theQuestionSet.xSize * myQuestion.fragePos.y + myQuestion.fragePos.x;
    13. CrosswordTextField *myQuestionCell = [crosswordCells objectAtIndex:fieldPosition];
    14. questionFontSize = 6;
    15. CGRect textViewRect = myQuestionCell.frame;
    16. /*
    17. Einen UITextView für jede Frage in den Array "textViews" schreiben und
    18. einen UIView hinzufügen.
    19. Die Zeile "newView.autocorrectionType = UITextAutocorrectionTypeNo;"
    20. zeigt keine veränderung am Programmverhalten.
    21. */
    22. UITextView *newView = [[UITextView alloc] initWithFrame: textViewRect];
    23. newView.text = myQuestion.frageKurzerText;
    24. newView.backgroundColor = [UIColor colorWithRed: 0.5 green: 0.5 blue: 0.5 alpha: 0.0 ];
    25. newView.scrollEnabled = NO;
    26. newView.userInteractionEnabled = YES;
    27. [newView setDelegate:self];
    28. newView.textAlignment = UITextAlignmentLeft;
    29. newView.textColor = [UIColor whiteColor];
    30. newView.font = [UIFont systemFontOfSize:questionFontSize];
    31. newView.autocorrectionType = UITextAutocorrectionTypeNo;
    32. [textViews addObject:newView];
    33. [zoomView addSubview:newView];
    34. [newView release];
    35. }
    36. ...
    37. //UITextView Delegate-Methode in der Riddle-Klasse
    38. -(BOOL)textViewShouldBeginEditing:(UITextView *)textView {
    39. textView.autocorrectionType = UITextAutocorrectionTypeNo;
    40. //auch ohne UITextAutocorrectionTypeNo keine Veränderung am verhalten
    41. //Die Schleife sucht das UITextField für die Eingabe des ersten Antwort-Buchstabens
    42. for (int i = 0; i < [questionSet.questionArray count]; i++) {
    43. if ([[[questionSet.questionArray objectAtIndex:i] frageKurzerText] isEqualToString:textView.text]) {
    44. CrosswordTextField *tField = [self textfieldForPosition:
    45. [[questionSet.questionArray objectAtIndex:i] antwortPos]];
    46. markIsWagrecht = [[questionSet.questionArray objectAtIndex:i] wagrecht];
    47. if ([tField isFirstResponder]) [tField resignFirstResponder];
    48. [tField becomeFirstResponder];
    49. break;
    50. }
    51. }
    52. return NO;
    53. }
    Alles anzeigen


    Ich spreche an keine weiteren Stelle einen UITextView an und mir
    sind mitlerweile alle Ideen ausgegangen wo ich noch nachsehen könnte.
    Die Autocorretion springt wenn dann nur nach einem Touche auf den TextView an.
    Das aber auch nicht immer. Ich bin echt froh über jeden Ansatz zu einer Lösung.

    Grüße
    dealloc {
    [myLeak retain];
    }
  • Habe eine Lösung, wenn die auch etwas "von hinten durch die Brust ins Auge" ist.

    Da die Korrektur nur nach dem ersten Touche stattfindet,
    Kopiere ich in der Delegate-Methode den TextView und
    entferne den alten textView.

    Quellcode

    1. //UITextView Delegate-Methode in der Riddle-Klasse
    2. -(BOOL)textViewShouldBeginEditing:(UITextView *)textView {
    3. ...
    4. for (int i = 0; i < [textViews count]; i++) {
    5. if (textView == [textViews objectAtIndex:i]) {
    6. UITextView *trickyTextView = [[UITextView alloc] initWithFrame:textView.frame];
    7. trickyTextView.text = textView.text;
    8. trickyTextView.font = textView.font;
    9. trickyTextView.autocorrectionType = UITextAutocorrectionTypeNo;
    10. trickyTextView.textColor = textView.textColor;
    11. trickyTextView.backgroundColor = textView.backgroundColor;
    12. trickyTextView.delegate = self;
    13. trickyTextView.scrollEnabled = NO;
    14. [textViews replaceObjectAtIndex:i withObject:trickyTextView];
    15. [textView removeFromSuperview];
    16. [zoomView addSubview:trickyTextView];
    17. [trickyTextView release];
    18. break;
    19. }
    20. }
    21. return NO;
    Alles anzeigen


    sollte jemandem etwas "korrekteres" einfallen bin ich dafür gerne noch offen :)
    dealloc {
    [myLeak retain];
    }
  • Du kannst auch das Tag per UIView.Tag bekommen.. Dann musst du nicht alle durchgehen. Die Funktion der superview des textfeldes heißt irgendwas mit getviewwithtag oder so - kann gerade leider nicht in die Doku schauen;)
    "Die Steinzeit ging auch nicht zu Ende weil die Steine ausgingen"