2017-01-17 14 views
11

Mam dziwny problem z moją aplikacją zbudowaną w Ionic 1.3.2, która dzieje się tylko w systemie iOS.Klawiatura otwiera się po kliknięciu pustego miejsca.

Kiedy klikam na wejście tekstowe, klawiatura otwiera się jak zwykle, ta część działa zgodnie z oczekiwaniami, a element input zostaje wyostrzony.

Jednak po kliknięciu niektórych obszarów ekranu poza dowolnymi danymi wejściowymi, np. O 20 pikseli poniżej pola tekstowego, które posiadam, klawiatura opsn lub zamyka się i ponownie otwiera natychmiast, jeśli jest już otwarta, ale numer input 't get focus i document.activeElement faktycznie zwraca element body (zaznaczony w inspektorze Safari).

Tak więc w tym trybie mogę wpisać cokolwiek chcę, ale wprowadzony tekst nie pojawia się nigdzie, tak jakbym pisał nigdzie (co jest trochę dziwne).

Ponadto, jeśli kliknę 2-3 razy w jednym z tych miejsc, całe awarii aplikacji z EXC_BAD_ACCESS wewnątrz niektórych UIWebView wewnętrzne:

* 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 

ktoś wie jak rozwiązać ten problem?

Używam jonów 1.3.2. To nie wydaje się być problemem z wtyczką Ionic Keyboard, bo to samo dzieje się, nawet jeśli ją usunę.

Edit (Jak odtworzyć):

Oto sample project że można użyć do odtworzenia tego problemu (KeyboardBugRepro.zip). Będziesz musiał wykonać następujące czynności, aby uruchomić go po wyodrębnieniu archiwum:

  1. Zainstaluj Node.js. Jeśli używasz Hombrew uruchomić brew install node
  2. Install jonowych i Cordova globalnie z KMP: npm install -g ionic cordova
  3. jeśli mogą być konieczne do uruchomienia „jonowy przygotować” przed uruchomieniem projektu, ale można przejść do następnego kroku początkowo i sprawdzić, czy to działa.
  4. Uruchom ionic emulate ios. Spowoduje to uruchomienie symulatora iPhone SE i uruchomienie aplikacji.
  5. Upewnij się, że wyłączona została klawiatura sprzętowa w opcjach symulatora (Sprzęt -> Klawiatura> odznacz Podłącz klawiaturę sprzętową).

Po uruchomieniu aplikacji pojawi się ekran logowania. Teraz kliknij gdzieś nieco poniżej wprowadzonego hasła i obserwuj, jak klawiatura oprogramowania otwiera się, ale wejście nie jest skupione. Ale jeśli klikniesz bezpośrednio na dane wejściowe, zostanie ono skupione. Kliknięcie pustego miejsca spowoduje zamknięcie klawiatury.

Aby odtworzyć awarię wystarczy zrobić to samo wiele razy z rzędu bardzo szybko, zwykle wystarczy 2-3 kliknięcia.

Aby uruchomić projekt z Xcode, wystarczy otworzyć projekt wygenerowany przez ionic w <project>/platforms/ios/KeyboardBug.xcodeproj i nacisnąć Uruchom.

+0

wygląda jak ios i błąd przeglądarki. Czy wypróbowałeś rozwiązanie wymienione tutaj - https://github.com/driftyco/ionic-plugin-keyboard/issues/217 – Gandhi

+0

czy miałeś okazję to sprawdzić? – Gandhi

+0

@Gandhi Myślę, że to inny błąd. Dodam link do postu z krokami do odtworzenia tego, możesz spojrzeć, jeśli chcesz. Złożyłem także raport o błędzie do Apple przeciwko Safari i zasadniczo wysłałem dzisiaj ten sam kod. Zaktualizuję post, gdy usłyszę od nich. – iosdude

Odpowiedz

2

Usuń wszystkie zdarzeniaListenery i zaznacz. Myślę, że w jednym z nich ma miejsce pewne zderzenie, które aktywuje "błędy".

3

Aby usunąć klawiaturę, należy utracić skupienie na danych wejściowych.

document.activeElement.blur(); 

Za pomocą tej linii usuwa się fokus, a klawiatura znika.

W twoim przypadku możliwe jest dodanie zdarzenia na ciele i ponowne zatrzymanie otwierania klawiatury po kliknięciu wejścia.

$(document).ready(function() { 
    $('body').click(function() { 
    document.activeElement.blur(); 
    }); 
+0

To nie rozwiązuje problemu - ukrywasz tylko jego efekty końcowe (jeśli aplikacja nie ulegnie awarii, jak wspomniano wcześniej). Ponadto nie będzie "document.activeElement.blur();" ukryć DOWOLNY aktywny element? – Hekkaryk

+0

zobacz http://stackoverflow.com/questions/5937339/ipad-safari-make-keyboard-disappear –

+1

@AkshayTilekar Odpowiedź nie jest w żaden sposób powiązana z pytaniem użytkownika – Gandhi

Powiązane problemy