2014-10-04 1 views
4

iOS 8 업데이트를 내 크로스 워드 앱인 Four Down에 제공하고 답변을받을 수없는 상태가되는 보고서를 받기 시작했습니다. 키보드를 두드려서 입력하면 문자를 입력하는 대신 해지합니다.앱이 백그라운드에서 실행 된 후에 키보드가 탭을 수신하지 않습니다.

조사가 끝나면 앱이 백그라운드로 들어가고 다시 활성화 될 때마다이 상태가됩니다. 앱을 종료하고 다시 실행하면 다음 번에 백그라운드에서 다시 돌아올 때까지 문제가 해결됩니다.

문제가 발생하면 키보드 아래의 시각이 터치를 받고 있기 때문에 시각적으로 가려진 것이 아니라 터치 감지에 잘못된 순서로 물건이 쌓인 것처럼 보입니다. 나는 문제가 iOS 8과 관련 있다고 믿는다.

문제를 진단하기 위해 보내지는 이벤트를 검사 할 수 있도록 UIApplication을 서브 클래 싱하고 sendEvent를 재정의했습니다. 문제가 발생하면 이벤트가 잘못된 UIWindow에 할당됩니다.

2014-10-04 07:56:57.998 four-down[95709:8557144] <UITouchesEvent: 0x7fe838f07350> timestamp: 1.29014e+06 touches: {(
    <UITouch: 0x7fe83a11abf0> phase: Began tap count: 1 window: <UITextEffectsWindow: 0x7fe838d549e0; frame = (0 0; 320 568); opaque = NO; gestureRecognizers = <NSArray: 0x7fe838d556d0>; layer = <UIWindowLayer: 0x7fe838d54ea0>> view: <UIKeyboardLayoutStar: 0x7fe838da6a90; frame = (0 0; 320 216); opaque = NO; layer = <CALayer: 0x7fe838db3cc0>> location in window: {243, 388.5} previous location in window: {243, 388.5} location in view: {243, 36.5} previous location in view: {243, 36.5} 
)} 

를 그리고 여기가 작동하지 않는 경우입니다 : : 여기 일하고 행사입니다

2014-10-04 07:58:08.952 four-down[95709:8557144] <UITouchesEvent: 0x7fe838f07350> timestamp: 1.29021e+06 touches: {(
    <UITouch: 0x7fe83a5c91a0> phase: Began tap count: 1 window: <UIWindow: 0x7fe83a33f3f0; frame = (0 0; 320 568); gestureRecognizers = <NSArray: 0x7fe83a340010>; layer = <UIWindowLayer: 0x7fe83a304160>> view: <CrosswordInteractiveView: 0x7fe83a555920; frame = (0 65; 310 310); gestureRecognizers = <NSArray: 0x7fe83a54d4e0>; layer = <CALayer: 0x7fe83a544df0>> location in window: {241.5, 379} previous location in window: {241.5, 379} location in view: {236.5, 250} previous location in view: {236.5, 250} 
)} 

참고 두 이벤트에서 다른 창을여십시오. UITextEffectsWindow는 키보드가 포함 된 창이고 UIWindow는 기본 응용 프로그램 창입니다. 각 창에서 windowLevel 속성을 확인했습니다. 두 경우 모두 동일합니다 : 키보드 창은 1.0이고 주 응용 프로그램 창은 0.0입니다.

무엇이 잘못 되었습니까? iOS 7에서 작동한다는 것을 감안할 때, iOS 버그처럼 느껴지 겠지만, iOS 8 API가 있어야할까요? 그렇지 않다면 해결 방법에 대한 제안을 환영합니다

+0

: 한편

, 나는 버그 리포트를 중지 한 다음 해결 방법을 알아 냈어? 나도 같은 문제에 직면 해있다! – gusbit

+0

@gusbit 아니요,하지만 해결 방법을 찾아 냈습니다. 나는 답으로 게시 할 것이다. 희망이 도움이됩니다. –

답변

2

나는 애플에 레이더 (18546966)를 제출했습니다. 그들은 그것을 18406902의 복제본으로 마감했습니다. 18406902는 닫혀 있었고, 분명히 그것이 모든 정보입니다. iOS 9 베타 버전에서 수정 될 수있는 iOS 버전이 무엇인지 알지 못합니다. 아직 테스트하지 않았습니다. 혹시 이것에 대한 답을 찾으셨습니까

- (UIView*) hitTest:(CGPoint) point withEvent:(UIEvent*) event { 
    UIView* hitView = [super hitTest:point withEvent:event]; 
    if (!hitView) { 
     UIWindow* keyboardWindow = [self findKeyboardWindow]; 
     if (keyboardWindow) { 
      UIView* viewInKeyboardWindow = [keyboardWindow hitTest:point withEvent:event]; 
      if (!viewInKeyboardWindow) { 
       [self resignFirstResponder]; 
      } else { 
       return viewInKeyboardWindow; 
      } 
     } else { 
      [self resignFirstResponder]; 
     } 
    } 
    return hitView; 
} 

- (UIWindow*) findKeyboardWindow { 
    NSArray* windows = [UIApplication sharedApplication].windows; 
    if (windows.count == 2) { 
     for (UIWindow* candidate in windows) { 
      if (candidate != self.window) { 
       return candidate; 
      } 
     } 
    } 
    return nil; 
} 
관련 문제