Lösung
Hier ist eine vollständige Lösung / Problemumgehung für dieses Problem. Bitte stimmen Sie auch die Antwort von Blld ab , da dies die entscheidende Information war, die benötigt wurde!
Alternative Titel zur Unterstützung der Suche
- Anzeigen der Emoji-Tastatur als Standard für ein UIKeyInput-Objekt (in iOS 13)
- Erzwingen Sie, dass iOS 13 die Emoji-Tastatur anzeigt
- Setzen Sie das
UITextInputMode.primaryLanguage
auf Emoji - Stellen Sie die Tastatur programmgesteuert auf Emoji ein
Vor ios13 der Rückkehr UITextInputMode
mit primaryLanguage
dieser entsprach „Emoji“ zu zeigen , die Emoji - Tastatur Standard würde (siehe Bild unten).
Beispielcode für die Rückgabe des "Emoji" UITextInputMode
.
//
// ViewController.swift
// Keyboard Info
//
// Created by Richard Stelling on 30/09/2019.
// Copyright © 2019 Richard Stelling. All rights reserved.
//
import UIKit
class TestButton: UIButton, UIKeyInput {
var hasText: Bool = true
func insertText(_ text: String) { print("\(text)") }
func deleteBackward() {}
override var canBecomeFirstResponder: Bool { return true }
override var canResignFirstResponder: Bool { return true }
override var textInputMode: UITextInputMode? {
for mode in UITextInputMode.activeInputModes {
if mode.primaryLanguage == "emoji" {
return mode
}
}
return nil
}
}
Wenn Sie diesen Code unter iOS 12 ausführen, wird die Tastatur auf die Emoji-Tastatur des Systems eingestellt, unter iOS 13 hat dies jedoch keine Auswirkungen.
Ist das ein bekannter Fehler? Gibt es eine Problemumgehung?
Aktualisierung
- Von @Navillus angefordert , ist die vollständige Liste der "aktiven Eingabemodi"; "en-GB", "emoji"
- Getestet und bestätigt am; 13.0, 13.1, 13.1.1, 13.1.2 und 13.2 (Startwert 1)
Antworten:
Ich habe ein Radar für iOS 13 eingereicht, weil ich eine zweisprachige Japanisch / Englisch-App habe. Einige Felder sind japanisch und einige englisch, daher ist es offensichtlich sinnvoll, dem Benutzer den richtigen Tastaturtyp zu präsentieren, anstatt ihn 20 Mal hin und her drehen zu lassen.
Hierfür gab es eine Problemumgehung. Nachdem das UIKit 'textInputMode' aufgerufen hatte, konnten Sie im Hauptthread Folgendes tun:
Dadurch wird die Tastatur nach dem Antworten mit dem gewünschten textInputMode neu geladen. Ich informierte sie über den Fehler und die Problemumgehung, um das richtige Verhalten zu erhalten.
In iOS 13.1 wurde der Fehler also nicht behoben, sie blockierten jedoch meine Problemumgehung.
Nett. Ich werde ihnen keine Fehler mehr melden. Wenn ich eine Problemumgehung finde, verwende ich sie einfach.
Es scheint also, dass sie diese Funktion jetzt stillschweigend deaktivieren. Und es ist eine Funktion, die buchstäblich der Zweck dieses Methodenaufrufs ist, um herauszufinden, welcher Eingabemodus dem Benutzer präsentiert werden soll.
Es funktioniert jedoch immer noch in Ordnung, wenn Sie eine andere Sprache haben und Englisch auswählen möchten.
Wenn mein Benutzer Japanisch als Tastaturauswahl festlegt, kann ich eine englische Tastatur erzwingen. Nur nicht umgekehrt. Alle Versuche, einen japanischen Eingabemodus zu erhalten, werden auf einer englischen Tastatur ausgeführt.
BEARBEITEN:
Es gibt einen anderen Pfad, den Sie umgehen können, der jedoch die Ermittlung und Verwendung der internen API umfasst, was nicht einfach ist. Sie müssten im Wesentlichen die Funktionen finden, die zum Verwalten der Ergebnisse beim Drücken der Globustaste verwendet werden. Wenn Sie dies tun, simulieren Sie im Wesentlichen die Taps des Benutzers und es hat weitreichende Auswirkungen, dh die Tastatur wird auch für andere Apps geändert. Es wird also nicht empfohlen, die App Store-Übermittlung schlägt zu 100% fehl. Ich möchte es wegen der Ergebnisse meiner letzten Problemumgehung nicht veröffentlichen.
Ich denke, es ist nicht möglich, Apple sehr leicht zu verstehen. Ich weiß nur:
Daher sollten zukünftige Problemumgehungen gehortet werden, bis ihre Absichten klar sind und / oder sie diesen Fehler beheben (was sie tun sollten). Das einfache Widerrufen eines Teils der API ohne Veröffentlichung der Änderung ist ein schwerwiegender Fehler.
quelle
Dies scheint ein iOS 13-Fehler zu sein. Die Problemumgehung (bei Geräten wirkt sich dies nicht auf den Simulator aus) besteht darin, die
textInputContextIdentifier
Eigenschaft zu überschreiben und einen Wert ungleich Null zurückzugeben.quelle
Sie müssen
textinputcontextidentifier
das Textfeld festlegen, damit iOS weiß, wo die benutzerdefinierte Datei gespeichert werden solltextInputMode
Es ist nicht im Dokument geschrieben, aber es funktioniert.
ref: https://developer.apple.com/documentation/uikit/uiresponder/1621091-textinputcontextidentifier
quelle
"emoji"
oder""
fürtextInputContextIdentifier
in meinem BenutzerUITextField
wird die Emoji-Tastatur angezeigt (in Kombination mit dertextInputMode
Überschreibung in der Frage). Vielen Dank für den Tipp zu den versteckten Dokumenten. 👍