首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >默认情况下,在iOS 13上显示系统Emoji键盘

默认情况下,在iOS 13上显示系统Emoji键盘
EN

Stack Overflow用户
提问于 2019-09-30 12:33:37
回答 4查看 7.2K关注 0票数 19

溶液

这是一个关于这个问题的全面解决办法/工作,请投票给Blld的回答,因为这是所需的重要信息!

辅助搜索的替代标题

  • 将Emoji键盘显示为UIKeyInput对象的默认值(在iOS 13中)
  • 强制iOS 13显示Emoji键盘
  • UITextInputMode.primaryLanguage设置为emoji
  • 可编程地将键盘设置为emoji

ios13之前,返回与primaryLanguage相同的“表情符号”的UITextInputMode将默认显示Emoji键盘(见下图)。

返回"emoji“UITextInputMode的示例代码。

代码语言:javascript
运行
复制
//
//  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)
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2019-10-24 14:22:37

注意:确保启用了Emoji键盘。

这似乎是一个iOS 13错误,所做的工作(对于设备,这不影响模拟器)是覆盖textInputContextIdentifier属性并返回一个非零值。

代码语言:javascript
运行
复制
//
//  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
    }
}

感谢布勒尔德的回答。

票数 9
EN

Stack Overflow用户

发布于 2019-10-03 01:28:32

我为iOS 13设置了一个雷达,因为我有一个双语的日语/英语应用程序。有些字段是日语的,有些是英语的,所以很明显,向用户展示正确的键盘类型是有意义的,而不是让他们来回翻转20次。

有一个解决办法,就是在UIKit调用“textInputMode”之后,在主线程中可以这样做:

代码语言:javascript
运行
复制
// has to be done after the textInputMode method is called
if #available(iOS 13, *) {
    textField.keyboardType = textField.keyboardType
} 

这将迫使键盘在使用所需的textInputMode进行应答后重新加载。我向他们报告了错误,并提出了解决办法,以获得正确的行为。

因此,在iOS 13.1中,错误没有得到修复,但是他们阻止了我的解决办法。

好的。我不会再向他们报告任何虫子了。相反,如果我找到了解决办法,我就会使用它。

因此,他们现在似乎正在静默地禁用此功能。这是一个特性,这是这个方法调用的字面意义,目的是找出应该给用户提供什么样的输入模式。

不过,如果你有另一种语言,并且想选择英语的话,它仍然可以工作。

因此,如果我的用户将日语设置为键盘选择,那么我可以强制使用英语键盘。只是不是相反的。任何获得日文输入模式的尝试最终都会出现在英语键盘上。

编辑:

还有另一种方法可以解决这个问题,但是它涉及到内部API的发现和使用,这并不简单。您必须从本质上找到用于管理按下地球仪按钮的结果的函数。如果你这样做,你实际上是在模拟用户的水龙头,它有广泛的影响,也就是说,键盘也将改变为其他应用程序。因此,它是不推荐的,100%,它将失败应用商店提交。我不想发布它,因为我的最后一个解决办法的结果。

我认为很难很容易地理解苹果。我只知道:

  1. API不像发布的那样起作用。
  2. 据报道,他们没有修复这个错误。
  3. 自从提出报告以来,他们就(有意或无意)破坏了解决办法。

因此,未来的解决方案应该囤积起来,直到他们的意图明确和/或他们修复这个错误(这是他们应该做的)。简单地撤销部分API而不发布更改是一个主要的错误。

票数 10
EN

Stack Overflow用户

发布于 2019-10-24 08:45:07

您需要在textinputcontextidentifier上设置textField,以便iOS知道在哪里保存自定义textInputMode

它不是在文档中写的,但它有效。

参考文献:https://developer.apple.com/documentation/uikit/uiresponder/1621091-textinputcontextidentifier

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58168017

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档