Larutan
Berikut ini adalah solusi lengkap / penyelesaian untuk masalah ini, mohon pilih jawaban Blld juga karena ini adalah informasi penting yang diperlukan!
Judul alternatif untuk membantu pencarian
- Menampilkan keyboard Emoji sebagai default untuk objek UIKeyInput (di iOS 13)
- Paksa iOS 13 untuk menampilkan keyboard Emoji
- Mengatur
UITextInputMode.primaryLanguage
to emoji - Secara sistematis mengatur keyboard ke emoji
Sebelum ios13 mengembalikan UITextInputMode
dengan primaryLanguage
yang sama dengan "emoji" akan secara default menampilkan Keyboard Emoji (lihat gambar di bawah).
Contoh kode untuk mengembalikan "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
}
}
Menjalankan kode ini di iOS 12 akan mengatur keyboard ke sistem Emoji Keyboard, tetapi di iOS 13 tidak ada pengaruhnya.
Apakah ini bug yang dikenal? Apakah ada solusinya?
Pembaruan
- Diminta oleh @Navillus , daftar lengkap "mode input aktif" adalah; "en-GB", "emoji"
- Diuji dan dikonfirmasi pada; 13.0, 13.1, 13.1.1, 13.1.2 dan 13.2 (seed 1)
Jawaban:
Saya mengajukan radar ini untuk iOS 13 karena saya memiliki aplikasi Jepang / Inggris bilingual. Beberapa bidang adalah bahasa Jepang dan bahasa Inggris jadi jelas masuk akal untuk menyajikan jenis keyboard yang tepat kepada pengguna alih-alih membuatnya bolak-balik 20 kali.
Ada solusi untuk ini, dan itu adalah setelah UIKit memanggil 'textInputMode', di utas utama Anda bisa melakukan ini:
Ini memaksa keyboard untuk memuat ulang setelah menjawab dengan textInputMode yang Anda inginkan. Saya memberi tahu mereka tentang bug, dan solusinya untuk mendapatkan perilaku yang benar.
Jadi di iOS 13.1 bug tidak diperbaiki, namun mereka memblokir solusi saya.
Bagus. Saya tidak akan melaporkan bug kepada mereka lagi. Alih-alih jika saya menemukan solusi, saya hanya akan menggunakannya.
Jadi sepertinya mereka sekarang secara diam-diam menonaktifkan fitur ini. Dan itu adalah fitur, ini benar-benar tujuan dari pemanggilan metode ini, untuk mengetahui mode input apa yang harus disajikan kepada pengguna.
Ini masih bekerja ok meskipun jika Anda memiliki bahasa lain dan ingin memilih bahasa Inggris.
Jadi jika pengguna saya menetapkan bahasa Jepang sebagai pilihan keyboard maka saya dapat memaksakan keyboard bahasa Inggris ke atas. Hanya saja tidak sebaliknya. Setiap upaya untuk mendapatkan mode input Jepang berakhir di keyboard bahasa Inggris.
EDIT:
Ada jalur lain yang bisa Anda atasi, tetapi ini melibatkan penemuan dan penggunaan API internal yang tidak mudah. Anda harus menemukan fungsi yang digunakan untuk mengelola hasil dari menekan tombol globe. Jika Anda melakukannya, Anda pada dasarnya mensimulasikan ketukan pengguna dan memiliki efek rentang luas, yaitu, keyboard akan diubah untuk aplikasi lain juga. Jadi tidak disarankan, 100% itu akan gagal pengiriman App Store. Saya tidak ingin mempostingnya karena hasil dari solusi terakhir saya.
Saya pikir itu tidak mungkin untuk memahami Apple dengan mudah. Yang saya tahu adalah:
Jadi solusi di masa depan harus ditimbun sampai niat mereka jelas dan / atau mereka memperbaiki bug ini (yang harus mereka lakukan). Mencabut sebagian API tanpa mempublikasikan perubahan adalah bug utama.
sumber
Ini tampaknya merupakan bug iOS 13, penyelesaiannya (untuk perangkat, ini tidak mempengaruhi Simulator) adalah untuk menimpa
textInputContextIdentifier
properti dan mengembalikan nilai non-nil.sumber
Anda perlu mengatur
textinputcontextidentifier
textField agar iOS tahu di mana harus menyimpan customtextInputMode
Itu tidak ditulis dalam dokumen tetapi itu bekerja.
ref: https://developer.apple.com/documentation/uikit/uiresponder/1621091-textinputcontextidentifier
sumber
"emoji"
atau""
untuktextInputContextIdentifier
di kebiasaan sayaUITextField
menunjukkan keyboard Emoji (ketika dikombinasikan dengantextInputMode
menimpa dalam pertanyaan). Terima kasih atas tipnya pada dokumen tersembunyi. 👍