Rozwiązanie
Oto pełne rozwiązanie / obejście tego problemu, proszę również głosować na odpowiedź Bllda, ponieważ była to niezbędna niezbędna informacja!
Alternatywne tytuły ułatwiające wyszukiwanie
- Wyświetlanie domyślnej klawiatury Emoji dla obiektu UIKeyInput (w iOS 13)
- Wymuś iOS 13, aby wyświetlić klawiaturę Emoji
- Ustawienie
UITextInputMode.primaryLanguage
emoji - Programowo ustaw klawiaturę na emoji
Przed ios13 zwracanie UITextInputMode
z primaryLanguage
tym równym „emoji” domyślnie pokazywałoby klawiaturę Emoji (patrz obrazek poniżej).
Przykładowy kod zwracający „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
}
}
Uruchomienie tego kodu w systemie iOS 12 spowoduje ustawienie klawiatury na systemową klawiaturę Emoji, ale w systemie iOS 13 nie ma to wpływu.
Czy to znany błąd? Czy jest w pobliżu praca?
Aktualizacje
- Na żądanie @Navillus pełna lista „aktywnych trybów wprowadzania” jest następująca; „en-GB”, „emoji”
- Testowane i potwierdzone dnia; 13.0, 13.1, 13.1.1, 13.1.2 i 13.2 (materiał siewny 1)
Odpowiedzi:
Złożyłem radar na ten temat dla iOS 13, ponieważ mam dwujęzyczną japońską / angielską aplikację. Niektóre pola są japońskie, a niektóre angielskie, więc oczywiście sensowne jest zaprezentowanie użytkownikowi odpowiedniego rodzaju klawiatury, zamiast 20-krotnego przewijania w tę iz powrotem.
Było obejście tego problemu, a mianowicie, że po wywołaniu przez UIKit „textInputMode” w głównym wątku można to zrobić:
To zmusza klawiaturę do ponownego załadowania po odpowiedzi z żądanym tekstem TextInputMode. Poinformowałem ich o błędzie i obejściu, aby uzyskać prawidłowe zachowanie.
Tak więc w iOS 13.1 błąd nie został naprawiony, jednak zablokowały moje obejście.
Miły. Nie będę im więcej zgłaszać błędów. Raczej jeśli znajdę obejście, po prostu go wykorzystam.
Wygląda więc na to, że teraz cicho wyłączają tę funkcję. Jest to funkcja, która jest dosłownie celem tego wywołania metody, aby dowiedzieć się, jaki tryb wprowadzania powinien zostać przedstawiony użytkownikowi.
To wciąż działa OK ale jeśli masz inny język i chcesz wybrać angielsku.
Więc jeśli mój użytkownik ustawi japońską jako klawiaturę, mogę wymusić angielską klawiaturę. Po prostu nie na odwrót. Wszelkie próby uzyskania japońskiego trybu wprowadzania kończą się na angielskiej klawiaturze.
EDYTOWAĆ:
Istnieje inna ścieżka, którą można obejść, ale wiąże się to z odkryciem i użyciem wewnętrznego interfejsu API, co nie jest proste. Trzeba będzie zasadniczo znaleźć funkcje używane do zarządzania wynikami po naciśnięciu przycisku kuli ziemskiej. Jeśli to zrobisz, zasadniczo symulujesz stuknięcia użytkownika i ma on szeroki zakres efektów, to znaczy klawiatura zostanie zmieniona również dla innych aplikacji. Więc nie jest to zalecane, w 100% nie powiedzie się przesłanie App Store. Nie chcę tego publikować z powodu wyników mojego ostatniego obejścia.
Myślę, że nie można bardzo łatwo zrozumieć Apple. Wiem tylko, że:
Więc przyszłe obejścia powinny być gromadzone, dopóki ich intencje nie będą jasne i / lub nie naprawią tego błędu (co powinni zrobić). Po prostu odwołanie części interfejsu API bez opublikowania zmiany jest poważnym błędem.
źródło
Wygląda na to, że jest to błąd w systemie iOS 13, a obejście tego problemu (w przypadku urządzeń nie ma to wpływu na Symulator) polega na zastąpieniu
textInputContextIdentifier
właściwości i zwróceniu wartości innej niż zero.źródło
Musisz ustawić
textinputcontextidentifier
w polu tekstowym, aby iOS wiedział, gdzie zapisać niestandardowytextInputMode
Nie jest napisane w dokumencie, ale działa.
ref: https://developer.apple.com/documentation/uikit/uiresponder/1621091-textinputcontextidentifier
źródło
"emoji"
lub""
natextInputContextIdentifier
moich własnychUITextField
pokazów klawiaturę Emoji (w połączeniu ztextInputMode
ręcznym w pytaniu). Dzięki za wskazówkę dotyczącą ukrytych dokumentów. 👍