Solución
Aquí hay una solución / solución completa para este problema, ¡vote por favor la respuesta de Blld también porque esta era la información vital necesaria!
Títulos alternativos para ayudar a la búsqueda
- Mostrar el teclado Emoji como predeterminado para un objeto UIKeyInput (en iOS 13)
- Forzar iOS 13 para mostrar el teclado Emoji
- Configurar el
UITextInputMode.primaryLanguage
emoji - Programáticamente configurar el teclado en emoji
Antes de que ios13 devolviera el UITextInputMode
con primaryLanguage
ese "emoji" equivalente, se mostraría de forma predeterminada el teclado Emoji (ver imagen a continuación).
Código de ejemplo para devolver el "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
}
}
Ejecutar este código en iOS 12 configurará el teclado en el sistema Emoji Keyboard, pero en iOS 13 no tiene ningún efecto.
¿Es esto un error conocido? ¿Hay alguna solución?
Actualizaciones
- Solicitado por @Navillus , la lista completa de "modos de entrada activa" es; "en-GB", "emoji"
- Probado y confirmado en; 13.0, 13.1, 13.1.1, 13.1.2 y 13.2 (semilla 1)
Respuestas:
Archivé un radar sobre esto para iOS 13 porque tengo una aplicación bilingüe japonés / inglés. Algunos campos son japoneses y otros ingleses, así que obviamente tiene sentido presentar el tipo de teclado correcto al usuario en lugar de hacer que se muevan 20 veces hacia adelante y hacia atrás.
Hubo una solución para esto, y eso fue que después de que el UIKit llama 'textInputMode', en el hilo principal podría hacer esto:
Esto obliga al teclado a recargarse después de responder con el textInputMode que deseaba. Les informé del error y la solución para obtener el comportamiento correcto.
Entonces, en iOS 13.1, el error no se solucionó, sin embargo, bloquearon mi solución.
Agradable. No les reportaré ningún error nuevamente. Más bien, si encuentro una solución alternativa, simplemente la usaré.
Entonces parece que ahora están desactivando silenciosamente esta función. Y es una característica, este es literalmente el propósito de esta llamada al método, para averiguar qué modo de entrada debe presentarse al usuario.
Sin embargo , todavía funciona bien si tienes otro idioma y quieres seleccionar inglés.
Entonces, si mi usuario establece el japonés como la selección de teclado, entonces puedo forzar un teclado en inglés. Simplemente no al revés. Cualquier intento de obtener un modo de entrada japonés termina en un teclado en inglés.
EDITAR:
Hay otra ruta que puede solucionar, pero implica el descubrimiento y el uso de API interna que no es sencilla. Esencialmente, tendría que encontrar las funciones utilizadas para administrar los resultados de presionar el botón de globo. Si hace eso, esencialmente está simulando los toques del usuario y tiene efectos de amplio alcance, es decir, el teclado también se cambiará para otras aplicaciones. Por lo tanto, no se recomienda, 100% fallará el envío de la App Store. No quiero publicarlo debido a los resultados de mi última solución.
Creo que no es posible entender a Apple muy fácilmente. Todo lo que sé es que:
Por lo tanto, las futuras soluciones deben atesorarse hasta que sus intenciones sean claras y / o solucionen este error (que es lo que deberían hacer). Simplemente revocar parte de la API sin publicar el cambio es un error importante.
fuente
Esto parece ser un error de iOS 13, la solución (para dispositivos, esto no afecta al simulador) es anular la
textInputContextIdentifier
propiedad y devolver un valor no nulo.fuente
textinputcontextidentifier
Debe configurar en el campo de texto para que iOS sepa dónde guardar el personalizadotextInputMode
No está escrito en el documento, pero funciona.
ref: https://developer.apple.com/documentation/uikit/uiresponder/1621091-textinputcontextidentifier
fuente
"emoji"
o""
paratextInputContextIdentifier
en mis personalizadosUITextField
muestra el teclado Emoji (cuando se combina con latextInputMode
anulación de la cuestión). Gracias por el consejo sobre los documentos ocultos. 👍