我的应用程序使用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生成的项目
并点击Run.