2014-09-30 67 views
3

我只有iOS8有此問題。一切在iOS7上正常工作。iOS8 - UIView inputView在應用程序恢復後消失

我的視圖配置:

  • 我有具有自定義inputView一個UIView子類(自定義鍵盤)
  • 的UIView子類具有敲擊手勢識別器,這使得螺紋,當它成爲所述第一響應
  • UIView的子類包含一個UITextView子視圖

我的測試程序:

  1. 點擊UIView子類。顯示自定義鍵盤。
  2. 在inputView上點擊一個特殊的鍵,這使得UITextView成爲第一響應者。顯示阿爾法鍵盤。
  3. 將文本輸入到UITextView中後,再次點擊UIView子類以使其成爲第一響應者。 Alpha鍵盤消失,自定義鍵盤重新出現。
  4. 單擊主頁按鈕退出到主屏幕。點擊應用程序圖標恢復應用程序。

問題是,當應用程序恢復時,inputView不再可見,而它只是在步驟#4之前。攻擊UIView子類不會使其恢復。如果在步驟#4之後檢查它,isFirstResponder對於UIView子類返回true。

任何想法如何讓我的inputView消失?

+0

或想法爲一個合理的變通。 – 2014-11-12 18:22:20

+1

我有一個建議來改善問題,並幫助答案的質量。構建一個簡單的單視圖示例,演示該問題,將其放在github上,並在此處發佈鏈接。這樣做沒有缺點。如果您可以通過一個簡單的例子來展示問題,修復和/或確定問題的步驟要簡單得多,而且提供的猜測更少。如果你不能複製它,那麼你知道原因是你在上面描述的情況之外的東西。 – mattr 2014-11-13 13:37:21

回答

0

我已經張貼在這裏演示bug並修復它的示例項目: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 2014-11-13 19:08:37

+0

我只是將修復程序推送到崩潰。我不認爲我在這個答案中澄清了這個問題,我只是提出了一個解決方案,對嗎? – user1021430 2014-11-13 19:26:23

+0

我認爲它是:你是OP並提供有關原始問題的附加信息。我不認爲這是一個解決方案,但如果你認爲這是你的問題的解決方案,那麼你是正確的。 – mattr 2014-11-13 19:30:55

2

這絕對是一個iOS錯誤。

inputView發佈與普通鍵盤相同的鍵盤通知。在這種情況下,即使MainView仍是第一響應者,UIKeyboardWillHideNotification在應用程序前臺被調用MainViewinputView

解決此問題的更簡單方法是在MainView上註冊UIKeyboardWillHideNotification並重置firstResponder狀態。

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

處理越野車觸發器。

func handleKeyboardWillHideNotification(notification:NSNotification) { 
    if (self.isFirstResponder()) 
    { 
     self.resignFirstResponder() 
     self.becomeFirstResponder() 
    } 
} 
相關問題