У меня странная проблема с моим приложением, созданным с помощью Ionic 1.3.2, которое происходит только на iOS.
Когда я нажимаю на вход в textarea, клавиатура открывается, как обычно, эта часть работает так, как ожидалось, и элемент input
получает фокус.
Однако, когда я нажимаю на определенные области экрана вне любых входов, например 20px ниже текстового поля, которое у меня есть, клавиатура либо opsn, либо закрывается и снова открывается сразу, если она уже открыта, но 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, потому что то же самое происходит, даже если я удалю его.
Изменить (как воспроизвести):
- Установите Node.js. Если вы используете Hombrew run
brew install node
- Установите Ион и Кордову глобально с npm:
npm install -g ionic cordova
- Если может потребоваться запустить "ионную подготовку" перед запуском проекта, но сначала вы можете перейти к следующему шагу и посмотреть, работает ли он.
- Запустите
ionic emulate ios
. Это запустит симулятор iPhone SE и запустит приложение. - Убедитесь, что вы отключили аппаратную клавиатуру в вариантах симулятора (Оборудование → Клавиатурa > снимите флажок "Подключить аппаратную клавиатуру" ).
Когда приложение запустится, вы увидите экран входа в систему. Теперь нажмите немного ниже ввода пароля и наблюдайте, как открывается клавиатура программного обеспечения, но вход не фокусируется. Но если вы нажимаете на вход напрямую, он фокусируется. Нажатие на пустое место закроет клавиатуру.
Воспроизведение аварии просто делает то же самое несколько раз подряд очень быстро, обычно достаточно 2-3 щелчков.
Чтобы запустить проект из Xcode, просто откройте проект, созданный с помощью ионного в <project>/platforms/ios/KeyboardBug.xcodeproj
, и нажмите Run.