首页 > 解决方案 > becomeFirstResponder 直到至少触摸任何 UITextField 一次才显示键盘

问题描述

最后可能的解决方案。

我正在开发一个UIViewController与三个UITextField。屏幕出现时打开键盘的功能连续工作了3年,然后在iOS 13之后就停止了。相同的脚本在 iOS 11 和 12 上仍然可以正常工作。

为了让它再次工作,我需要点击UITextField应用程序中的任何(它不需要在同一屏幕上)。之后,UITextField我的应用程序中的所有内容都在触发键盘。

不,我没有使用硬件键盘,这个问题也发生在真正的 iPhone X 上。

要打开键盘,我这样做:

override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)
    DispatchQueue.main.async { [weak self] in
        self?.textField.perform(
            #selector(self?.becomeFirstResponder),
            with: nil,
            afterDelay: 0.1)
    }
}

我在多个设备上对其进行了很好的测试,还录制了一段视频,显示 iOS 12 和 iOS 13 并排运行相同的二进制文件,并且该功能在 iOS 13 上不起作用。

同样,只有当用户从不点击任何 UITextField(或任何打开键盘的东西)时,它才不会打开键盘。单击此类组件后,键盘将再次开始打开。

该应用UIScene在 iOS 13 上使用。这可能是问题所在吗?

这是 iOS 13 上的已知错误吗?我不知道如何解决这个问题。

我的设置:

问题的屏幕截图,相同的二进制文件,进入此屏幕的相同操作,不同的行为(UIViewController后面的信息被手动隐藏):

在此处输入图像描述

可能的解决方案:

如果您Intercom在项目中使用。只需Intercom.logout()在 ViewController 启动时添加。在那之后,问题就消失了。

标签: swiftuiviewuikitios13foundation

解决方案


推荐阅读