我使用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插件的问题,因为即使我删除它也会发生同样的事情。
编辑(如何重现):
以下是您可以用来重现此问题的sample project(KeyboardBugRepro.zip)。解压缩归档后,您需要执行以下操作才能运行它:
brew install node
npm install -g ionic cordova
ionic emulate ios
。这将启动iPhone SE模拟器并启动应用程序。当应用程序启动时,您将看到登录屏幕。现在单击密码输入稍下方的某处,观察软件键盘如何打开但输入没有聚焦。但是,如果你直接点击输入,它会得到集中。单击空白区域将关闭键盘。
要重现崩溃只是连续多次连续执行相同的操作,通常只需2-3次点击。
要从Xcode运行项目,只需在<project>/platforms/ios/KeyboardBug.xcodeproj
中打开由ionic生成的项目,然后点击Run。
答案 0 :(得分:3)
要移除键盘,您需要失去对输入的关注。
document.activeElement.blur();
使用此行删除焦点,键盘消失。
在您的情况下,可以在您的身上添加事件,并在您点击输入时再次停止打开键盘。
$(document).ready(function () {
$('body').click(function () {
document.activeElement.blur();
});
答案 1 :(得分:2)
删除所有eventListeners并检查。我认为其中一个地方有一些碰撞,这会激活&#34;错误&#34;。