kivy iOS TextInput 由于带有外部键盘的建议和快捷栏而失去焦点

问题描述 投票:0回答:0

正如预期的那样,当选择 TextInput 时,它会获得焦点并且我可以输入文本。快捷方式栏出现在屏幕底部。如果我随后选择另一个文本字段,它会被短暂选择并在短时间内失去焦点。

该应用程序自 2022 年 9 月以来一直在 Appstore 中运行。旧的工作版本在 macOS 10.15 Catalina 上使用 xcode 编译。由于 App Store Connect 不再支持旧的 xcode 版本,因此我切换到 Xcode 14.3.1 和 macOS Ventura。我还尝试过 Xcode 版本 15 beta 和 Xcode 14。Kivy 2.0.0dev 和 Kivy 2.2.1。 1:1复制项目文件并从头开始创建一个新的项目文件并重新安装kivy-ios。同样的问题。

我可以排除:

  • 问题不在代码中,因为通过github对过去的工作版本进行了不同的测试。所有结果都相同。
  • 问题不在于硬件键盘,因为已经测试了具有不同键盘的不同 iPad。

当我在文本字段之间快速来回切换时,我从 xcode 收到消息:

[Assert] UIFocusItem: <<_UIRemoteKeyboardPlaceholderView: 0x105d18e90; frame = (0 0; 1024 0); layer = <CALayer: 0x28207cba0>>; size={1024, 0}> with parentFocusEnvironment: <UICompatibilityInputViewController: 0x1113d3600>  focusItemContainer: (null) has no coordinate space.

但我认为问题出在其他地方。

现在变得有趣了: 如果我在 iPad 中的常规 -> 键盘 -> 快捷方式关闭和建议关闭下关闭快捷方式栏,那么我根本无法选择任何文本输入。每个选定的 TextInput 立即失去焦点。您可以看到光标短暂闪烁。

带虚拟键盘:

如果我切换到下一个 TextInput,则方法 _check_keyboard_shown() 会被调用四次。接下来是 _upd_kbd_height()update_viewport()。焦点依然存在。

带硬件键盘(仅快捷栏):

如果我切换到下一个 TextInput,则方法 _check_keyboard_shown() 会被调用七次。紧随其后的是

if not self._win.is_keyboard_shown():
            self._sdl_keyboard.release()

self._sdl_keyboard.release()
在哪里以及如何定义?我根本找不到kivy中的代码。
self._win.is_keyboard_shown()
到底是什么?但在那之后的某个时刻(我不知道如何)调用 _keyboard_released() 并且新的 TextInput 失去焦点。经过一番解绑、释放、get_keyboard、check_keyboard最后连续执行了两次_upd_kbd_height()update_viewport()。我不知道为什么是两次。

在我看来,快捷栏就像键盘一样。例如。使用

 Window.softinput_mode = "pan"
整个布局会随着栏向上移动。仅当切换到另一个 TextInput 时,快捷栏不会像虚拟键盘一样重新出现。

ios kivy textinput lost-focus
© www.soinside.com 2019 - 2024. All rights reserved.