【问题描述】
在特定的场景下,在没有输入焦点的情况下,虚拟键盘仍然显示。重现步骤:
1、创建两个窗体,假设主窗体为 Form1,子窗体为Form2。
2、在 Form2 上放置一个 TEdit,用于获得焦点时弹出虚拟键盘。放置一个 TSpeedButton,在其 OnClick 事件中调用 ShowMessage 显示一句话,然后调用 Close 关闭当前窗体。
3、在 Form1 上放置一个 TSpeedButton,在其 OnClick 中显示 Form2。
4、运行程序,点击 Form1 上的 SpeedButton,然后在显示出来的 Form2 上点击 Edit,然后在弹出虚拟键盘后,点击 SpeedButton,然后会弹出消息提示。
5、点击 OK 关闭消息提示,窗体切换回 Form1,但虚拟键盘依然显示。
【解决方式】
在弹出消息框时,手动隐藏下键盘,简单的代码参考如下:
var ASvc:IFMXVirtualKeyboardService; begin ... if TPlatformServices.Current.SupportsPlatformService(IFMXVirtualKeyboardService,ASvc) then ASvc.HideVirtualKeyboard; ... end;
需要引用 FMX.Platform 和 FMX.VirtualKeyboard 单元。
如果你引用 qdac_fmx_vkhelper,那么不需要你手动处理,这个 Bug 在其中做了处理,请检出最新版本即可。
真正完美的解决方案,需要官方去修改源码处理。
另外,此问题仅限于 iOS 平台有,Android 平台不存在此问题。