2014-09-30 2 views
3

이 문제는 iOS8에서만 발생합니다. 모든 것이 iOS7에서 제대로 작동합니다.iOS8 - 앱이 다시 시작되면 UIView inputView가 사라집니다.

내보기 구성 : 나는 정의 inputView이있는 UIView 하위 (사용자 정의 키보드)가

  • UIView의 서브 클래스 탭 때 첫 번째 응답자가 될 수 탭 제스처 인식을 가지고
  • UIView의 서브 클래스는 UITextView의 하위 뷰를 포함

내 시험 절차 :

  1. UIView 하위 클래스를 누릅니다. 사용자 정의 키보드가 표시됩니다.
  2. inputView에서 특수 키를 누르면 UITextView가 첫 번째 응답자가됩니다. 알파 키보드가 표시됩니다.
  3. UITextView에 텍스트를 입력 한 후 UIView 하위 클래스를 다시 눌러 첫 번째 응답자로 만듭니다. 알파 키보드가 사라지고 사용자 정의 키보드가 다시 나타납니다.
  4. 홈 버튼을 클릭하면 기본 화면으로 돌아갑니다. 앱을 다시 시작하려면 앱 아이콘을 탭합니다.

버그가 있다는 것은 응용 프로그램이 다시 시작될 때 inputView가 더 이상 보이지 않는 반면 4 단계 직전 이었기 때문입니다. UIView 하위 클래스를 눌러도 다시 가져 오지 않습니다. isFirstResponder는 # 4 단계 후에 UIView 하위 클래스를 확인하면 true를 반환합니다.

어떻게하면 inputView가 사라지지 않게 할 수 있습니까?

+0

또는 합리적인 해결 방법에 대한 아이디어. –

+1

질문을 개선하고 답변의 질을 높이는 제안이 있습니다. 문제를 보여주고 github에 올려 놓고 여기에 링크를 게시하는 간단한 하나의보기 예제를 작성하십시오. 이렇게하는 데는 단점이 없습니다. 간단한 예제로 문제를 표시 할 수 있다면 문제를 수정하거나 식별하는 것이 훨씬 쉽고 추측이 쉽지 않습니다. 그것을 재현 할 수 없다면 그 원인은 위에 설명 된 상황의 외부에있는 것임을 알게됩니다. – mattr

답변

0

내가 여기에 대한 버그 및 수정을 보여주는 예제 프로젝트를 게시 한 : https://github.com/jeremywhuff/HWInputViewBugExample

실행을 iOS8의에, 그리고 당신이 버그를 볼 수 있습니다. iOS7에서 실행하면 그렇지 않습니다.

수정 사항을 보여줄 "해킹 수정"스위치를 추가했습니다. 확실히 이상적은 아니지만 내가 생각할 수있는 최선입니다. 키보드가 시뮬레이터에서 깜박 거리지만, 디바이스 테스트 중에는 이런 일이 일어나지 않습니다.

해킹 수정

은 applicationDidBecomeActive에서 찾을 수 있습니다

mainView.textView!.becomeFirstResponder() 
NSTimer.scheduledTimerWithTimeInterval(0.05, target: mainView.textView!, selector: "resignFirstResponder", userInfo: nil, repeats: false) 

이는 신속하게 보이지 않는 inputView 모드에서 시스템을 걷어차 나타나는 첫 번째로 반응을 사임 될 수있는 텍스트보기가 발생합니다.

+0

예를 들어 주셔서 감사합니다. 이것이 도움이 될 것입니다. 일반적으로 질문을 명확히하기 위해 대답을 사용하면 안됩니다. 질문을 편집하고 거기에 세부 정보를 추가해야합니다 : http://stackoverflow.com/help/editing. 또한 iOS 7.1 Simulator : # 2 단계에서 https://www.dropbox.com/s/gb3ebkjivkq7sx4/Screenshot%202014-11-13%2013.58.07.png?dl=0에 충돌이 발생합니다. 그러나 나는 고맙습니다! – mattr

+0

방금 ​​충돌을 수정했습니다. 나는이 대답에서 질문을 명확히했다고 생각하지 않는다. 단지 해결책을 제시했다. 맞습니까? – user1021430

+0

본인은 OP임을 알고 원래 질문에 대한 추가 정보를 제공합니다. 나는 해결책으로 이것을 보지 않는다. 그러나 당신이 당신의 질문에 대한 해결책이라고 생각한다면 당신은 정확하다. – mattr

2

이것은 분명히 iOS 버그입니다.

inputView 일반 키보드와 동일한 키보드 알림. 이 경우 MainView이 여전히 첫 번째 응답자인데도 MainViewinputView에 대해 앱 전경에 UIKeyboardWillHideNotification이 호출되고 있습니다.

이 문제를보다 명확하게 해결하려면 UIKeyboardWillHideNotificationMainView에 등록하고 firstResponder 상태를 재설정하십시오.

NSNotificationCenter.defaultCenter().addObserver(self, selector: "handleKeyboardWillHideNotification:", name: UIKeyboardWillHideNotification, object: nil) 

버그 트리거를 처리하십시오.

func handleKeyboardWillHideNotification(notification:NSNotification) { 
    if (self.isFirstResponder()) 
    { 
     self.resignFirstResponder() 
     self.becomeFirstResponder() 
    } 
} 
관련 문제