当前位置:  开发笔记 > IOS > 正文

单击空白区域后键盘打开

如何解决《单击空白区域后键盘打开》经验,为你挑选了0个好方法。

我的应用程序使用Ionic 1.3.2构建的一个奇怪的问题只在iOS上发生.

当我点击textarea输入时,键盘像往常一样打开,这部分按预期工作,input元素获得焦点.

但是,当我在任何输入之外点击屏幕的某些区域时,比如我所拥有的文本字段下方20px,键盘要么操作要么关闭,如果它已经打开但是input没有得到焦点,则立即重新打开document.activeElement实际上返回body元素(在Safari检查器中检查).

因此,在这种模式下,我可以输入我想要的任何内容,但输入的文本不会出现在任何地方,好像我在无处打字(这有点奇怪).

此外,如果我在其中一个地方点击2-3次,整个应用程序会在EXC_BAD_ACCESS内部一些UIWebView内部崩溃:

* thread #1: tid = 0x35ea78, 0x000000010c2c3acb libobjc.A.dylib`objc_msgSend + 11, queue = 'com.apple.main-thread', stop reason = EXC_BAD_ACCESS (code=EXC_I386_GPFLT)
  * frame #0: 0x000000010c2c3acb libobjc.A.dylib`objc_msgSend + 11
    frame #1: 0x000000010ec56024 UIKit`-[UITextInteractionAssistant(UITextInteractionAssistant_Internal) swallowsDoubleTapWithScale:atPoint:] + 264
    frame #2: 0x000000010ea4ce75 UIKit`-[UIWebDocumentView shouldSelectionAssistantReceiveDoubleTapAtPoint:forScale:] + 91
    frame #3: 0x000000010f1b930a UIKit`_UIWebDoubleTapAtLocation + 369
    frame #4: 0x000000010ec3d409 UIKit`-[UIGestureRecognizerTarget _sendActionWithGestureRecognizer:] + 57
    frame #5: 0x000000010ec451a8 UIKit`_UIGestureRecognizerSendTargetActions + 109
    frame #6: 0x000000010ec42c77 UIKit`_UIGestureRecognizerSendActions + 227
    frame #7: 0x000000010ec41f03 UIKit`-[UIGestureRecognizer _updateGestureWithEvent:buttonEvent:] + 891
    frame #8: 0x000000010ec2df7e UIKit`_UIGestureEnvironmentUpdate + 1395
    frame #9: 0x000000010ec2d9c3 UIKit`-[UIGestureEnvironment _deliverEvent:toGestureRecognizers:usingBlock:] + 521
    frame #10: 0x000000010ec2cba6 UIKit`-[UIGestureEnvironment _updateGesturesForEvent:window:] + 286
    frame #11: 0x000000010e772c1d UIKit`-[UIWindow sendEvent:] + 3989
    frame #12: 0x000000010e71f9ab UIKit`-[UIApplication sendEvent:] + 371
    frame #13: 0x000000010ef0c72d UIKit`__dispatchPreprocessedEventFromEventQueue + 3248
    frame #14: 0x000000010ef05463 UIKit`__handleEventQueue + 4879
    frame #15: 0x000000010c819761 CoreFoundation`__CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 17
    frame #16: 0x000000010c7fe98c CoreFoundation`__CFRunLoopDoSources0 + 556
    frame #17: 0x000000010c7fde76 CoreFoundation`__CFRunLoopRun + 918
    frame #18: 0x000000010c7fd884 CoreFoundation`CFRunLoopRunSpecific + 420
    frame #19: 0x0000000111fc8a6f GraphicsServices`GSEventRunModal + 161
    frame #20: 0x000000010e701c68 UIKit`UIApplicationMain + 159
    frame #21: 0x000000010aa7bd81 MyApp`main(argc=1, argv=0x00007fff55184680) + 65 at main.m:32
    frame #22: 0x000000010e42f68d libdyld.dylib`start + 1

有谁知道如何解决这个问题?

我正在使用Ionic 1.3.2.这似乎不是Ionic Keyboard插件的问题,因为即使我删除它也会发生同样的事情.

编辑(如何重现):

这是一个示例项目,您可以使用它来重现此问题(KeyboardBugRepro.zip).解压缩归档后,您需要执行以下操作才能运行它:

    安装Node.js. 如果你正在使用Hombrew runbrew install node

    使用npm在全球范围内安装Ionic和Cordova: npm install -g ionic cordova

    如果在运行项目之前可能需要运行"离子准备",但您可以先跳到下一步并查看它是否有效.

    ionic emulate ios.这将启动iPhone SE模拟器并启动应用程序.

    确保在模拟器选项中禁用了硬件键盘(硬件 - >键盘>取消选中"连接硬件键盘").

当应用程序启动时,您将看到登录屏幕.现在单击密码输入稍下方的某处,观察软件键盘如何打开但输入没有聚焦.但是,如果你直接点击输入,它会得到集中.单击空白区域将关闭键盘.

要重现崩溃只是连续多次执行相同的操作非常快,2-3次点击通常就足够了.

要从Xcode运行项目,只需打开ionic in生成的项目/platforms/ios/KeyboardBug.xcodeproj并点击Run.

推荐阅读
落单鸟人
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有