Showing the system Emoji keyboard by default on iOS 13
解决方案
这里是针对此问题的完整解决方案/解决方法,也请投票Blld的答案,因为这是所需的重要信息!
辅助搜索的替代标题
- 将Emoji键盘默认显示为UIKeyInput对象(在iOS 13中)
- 强制iOS 13显示表情符号键盘
-
将
UITextInputMode.primaryLanguage 设置为表情符号 - 以编程方式将键盘设置为表情符号
在ios13之前,返回
返回"表情符号"
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | // // 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 } } |
在iOS 12上运行此代码会将键盘设置为系统Emoji键盘,但在iOS 13上则无效。
这是一个已知的错误吗?有解决方法吗?
更新
- 由@Navillus请求,"活动输入模式"的完整列表为;" en-GB"," emoji"
- 经过测试并确认; 13.0、13.1、13.1.1、13.1.2和13.2(种子1)
我为此在iOS 13上引起了轰动,因为我有一个双语的日语/英语应用程序。有些字段是日语,有些是英语,因此显然向用户展示正确的键盘类型是有意义的,而不是使它们来回翻转20次。
有一个解决方法,就是在UIKit调用\\'textInputMode \\'之后,您可以在主线程中执行以下操作:
1 2 3 4 | // has to be done after the textInputMode method is called if #available(iOS 13, *) { textField.keyboardType = textField.keyboardType } |
这将强制键盘在回答所需的textInputMode后重新加载。我向他们通报了该错误以及解决方法,以获取正确的行为。
因此在iOS 13.1中,该错误未得到修复,但是它们阻止了我的解决方法。
不错。我不会再向他们报告任何错误。相反,如果我找到解决方法,我只会使用它。
因此,似乎他们现在正在静默禁用此功能。这是一个功能,从字面上讲,这就是此方法调用的目的,以找出应向用户提供哪种输入模式。
即使您使用另一种语言并想要选择英语,它仍然可以正常工作。
因此,如果用户将日语设置为键盘选择,则可以强制使用英语键盘。并非相反。任何尝试获得日语输入模式的尝试都将最终以英语键盘进行。
编辑:
还有另一种方法可以解决,但是涉及发现和使用内部API并不容易。您实际上必须找到用于管理按地球按钮的结果的功能。如果这样做,实际上是在模拟用户的点击,并且具有广泛的效果,也就是说,其他应用程序的键盘也将更改。因此不建议这样做,因为100%的应用商店提交都会失败。由于最后一个解决方法的结果,我不想发布它。
我认为不可能很容易理解Apple。我所知道的是:
因此,应该future积未来的解决方法,直到其意图明确和/或他们修复了此错误(这是他们应该做的)。仅仅撤销部分API而不发布更改是一个主要错误。
NB: Make sure you have the Emoji keyboard enabled.
这似乎是一个iOS 13错误,解决方法(对于设备,这不影响模拟器)是重写
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | // // 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 override var textInputContextIdentifier: String? {"" } // return non-nil to show the Emoji keyboard ?ˉ\\_(???)_/?ˉ 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 } } |
Thanks to blld for his answer.
您需要在textField上设置
保存在何处
它没有写在文档中,但是可以使用。
参考:https://developer.apple.com/documentation/uikit/uiresponder/1621091-textinputcontextidentifier