Deaktivieren Sie die iOS8-Quicktype-Tastatur programmgesteuert in UITextView

68

Ich versuche, eine App für iOS8 zu aktualisieren, die über eine Chat-Oberfläche verfügt, aber die neue Quicktype-Tastatur verbirgt die Textansicht. Daher möchte ich sie programmgesteuert oder im Interface Builder deaktivieren.

Ist es irgendwie möglich oder nur die Benutzer können es in den Geräteeinstellungen ausschalten?

Ich weiß, dass es eine Frage / Antwort gibt, die dieses Problem mit a löst UITextfield, aber ich muss es mit a tun UITextView.

rihe
quelle
1
Ich weiß nicht, ob du kannst oder nicht, aber es scheint sowieso keine gute Idee zu sein. Ich benutze eine App, die auf Android etwas Ähnliches macht, und es ist wirklich frustrierend. Ich denke, es ist besser, es zu umgehen, damit der Benutzer entscheiden kann, ob er diese Vorschläge dort haben möchte oder nicht.
Hassan
1
@ Hassan Mein Problem ist, dass es meine Benutzeroberfläche zerstört, also möchte ich alle Vorschläge ausblenden / deaktivieren.
Rihe
Ja, aber wäre es nicht besser, wenn Sie die Textansicht nach oben verschieben könnten, um die Tastatur aufzunehmen, anstatt die Vorschläge auszublenden? Wieder entschuldige ich mich, weil ich eigentlich nicht weiß, wie ich das machen soll, ich habe nur einen freundlichen Vorschlag gemacht.
Hassan
2
Vielleicht können Sie diese Antwort versuchen . Richten Sie die Benachrichtigungsmethode ein und verschieben Sie die Textansicht entsprechend, wenn sich die Höhe der Tastatur ändert. Ich weiß allerdings nicht, ob dies in iOS 8 funktionieren würde.
Hassan

Antworten:

127

Sie können die Tastaturvorschläge / Autocomplete / QuickType für eine UITextView deaktivieren, die den Text auf kleineren Bildschirmen wie dem 4S blockieren kann, wie in diesem Beispiel gezeigt

mit folgender Zeile:

myTextView.autocorrectionType = UITextAutocorrectionTypeNo;

Geben Sie hier die Bildbeschreibung ein Geben Sie hier die Bildbeschreibung ein

Und weiter, wenn Sie dies nur auf einem bestimmten Bildschirm tun möchten, z. B. auf dem 4S

if([[UIDevice currentDevice]userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
    CGFloat screenHeight = [UIScreen mainScreen].bounds.size.height;
    if (screenHeight == 568) {
        // iphone 5 screen
    }
    else if (screenHeight < 568) {
       // smaller than iphone 5 screen thus 4s
    }
}
mihai
quelle
2
UITextAutocorrectionTypeNo funktioniert nicht in iPhone 6 - iOS 8.1
iGW
2
@iGW als ich dies tat, nachdem UITextView oder UITextField bereits firstResponder waren, funktionierte es auch bei mir nicht. Versuchen Sie es entweder vorher einzustellen oder lösen Sie Resign aus und werden Sie FirstResponder (ersteres ist offensichtlich die "richtige" und angemessenere Methode, dies zu tun.
J_S
Wie erhalte ich den Verweis auf die Textansicht bei einer UIWebView?
Maximus S
2
Zu Ihrer Information, für Swift lautet der Code textField.autocorrectionType = .No
Rob Reuss
Für jede Unterklasse Responderdieser Implementierungen UIKeyInputkann die Getter-Methode für diese Variable implementiert werden, um zurückzukehren UITextAutocorrectionTypeNo, um den gleichen Effekt zu erzielen, wenn a nicht verwendet wird UITextField.
Bshirley
53

Der Vollständigkeit halber möchte ich hinzufügen, dass Sie dies auch in der tun können Interface Builder .

So deaktivieren Sie Tastaturvorschläge auf UITextFieldoder UITextView- im Attributes InspectorSet Correctionauf No.

Geben Sie hier die Bildbeschreibung ein

Nikita Kukushkin
quelle
Das hat bei mir nicht funktioniert. Der QuickType-Vorschlag wurde zu diesem Zeitpunkt immer noch für meine Tastatur angezeigt. Aber die programmatische Antwort hat bei mir funktioniert.
Mike S
Es ist seltsam , dass dies nicht für Sie arbeiten , weil im Wesentlichen , was es ist nicht festgelegt autocorrectionTypezu UITextAutocorrectionTypeNo. Das gleiche, was Sie im Code tun. Könnten Sie das überprüfen und wenn sich das Verhalten nicht ändert, sagen Sie mir, welche Versionen von Xcode und iOS Sie verwenden?
Nikita Kukushkin
Ich habe dies in meinem Projekt auf Nein gesetzt und es wird immer noch auf der benutzerdefinierten Swype-Tastatur angezeigt.
Almo
Ich habe keinen Weg gefunden, diese Swype-Tastatur dazu zu bringen, diesen Teil auszuschalten. Das Ding ist übrigens MASSIV. Ich muss meine Code-Abfrage auf die Größe einstellen und die Animation dafür anpassen.
Almo
7

Ich habe eine UITextView-Kategorieklasse mit der folgenden Methode erstellt:

- (void)disableQuickTypeBar:(BOOL)disable
{
    self.autocorrectionType = disable ? UITextAutocorrectionTypeNo : UITextAutocorrectionTypeDefault;

    if (self.isFirstResponder) {
        [self resignFirstResponder];
        [self becomeFirstResponder];
    }
}

Ich wünschte, es gäbe einen saubereren Ansatz. Außerdem wird davon ausgegangen, dass der automatische Korrekturmodus aktiviert war Default, was möglicherweise nicht immer für jede Textansicht gilt.

DZenBot
quelle
2

In Swift 2:

myUITextField.autocorrectionType = UITextAutocorrectionType.No
Nagendra Rao
quelle
1

In Swift 4.x:

myUTTextField.autocorrectionType = .no
yo2bh
quelle
0

Wie andere gesagt haben, können Sie verwenden:

textView.autocorrectionType = .no

Ich habe aber auch bemerkt, dass Leute Probleme damit haben, die Autovervollständigungsleiste tatsächlich auszutauschen, denn wenn die Textansicht bereits der erste Antwortende ist, wenn Sie ihren Autokorrekturtyp ändern, wird die Tastatur nicht aktualisiert. Anstatt zu versuchen, den Status "firstResponder" zurückzutreten und der textView neu zuzuweisen, um die Änderung zu bewirken, können Sie einfach Folgendes aufrufen:

textView.reloadInputViews()

und das sollte die Autocomplete-Leiste verbergen. Siehe https://developer.apple.com/documentation/uikit/uiresponder/1621110-reloadinputviews

Rance
quelle