[英]Unwanted Keyboard after Back Navigation
我的應用程序中的所有UIViewController
均由頂級UINavigationController
。 在當前位於我的導航堆棧頂部的UIViewController
,我有一組UITextField
。
當我在這些文本字段之一上調用becomeFirstResponder()
,然后立即導航回而不先改變焦點時,例如通過點擊另一個字段,就會出現問題。 向后瀏覽一個級別后,出現鍵盤,但我找不到辦法阻止它出現或消失。 當我進一步推送導航堆棧的視圖時,它甚至保持不變。
becomeFirstResponder()
調用,因為沒有該調用,就不會發生此問題。 becomeFirstResponder()
resignFirstResponder()
之后立即調用becomeFirstResponder()
,鍵盤仍會在向后導航后出現。 我嘗試了其他方法,例如檢測並辭職第一響應者或在viewWillDisappear()
調用endEditing()
,但未成功。 從堆棧彈出相應的視圖后,我什至不確定此鍵盤屬於什么鍵盤。 我無法在View Debugger中檢查鍵盤,因為它沒有出現在那里。
為什么會出現鍵盤,如何防止出現?
事實證明,抓住第一響應者的表單驗證一直在收回它,直到字段內容有效為止。 如果在向后導航之前未釋放狀態,則鍵盤將保持不變,並且很難將第一響應者分配給另一個控件。
在我的情況下,解決方案是更仔細地跟蹤哪個字段是第一響應者,檢測后退按鈕的按下,在這種情況下允許無條件地辭職第一響應者,然后為該字段退出第一響應者。
var currentTextField: UITextField?
override func viewWillDisappear(animated: Bool) {
super.viewWillDisappear(animated)
if let currentField = self.currentTextField {
currentField.resignFirstResponder()
}
}
override public func willMoveToParentViewController(parent: UIViewController?) {
if (parent == nil) {
backButtonPushed = true
}
super.willMoveToParentViewController(parent)
}
func customTextFieldDidBeginEditing(textField: UITextField) {
currentTextField = textField
}
public func textFieldShouldEndEditing(textField: UITextField) -> Bool {
// ...
// Must return true if back button is pushed.
if backButtonPushed {
return true
} else {
// ...
}
}
您是否嘗試改為在新VC的viewWillAppear()中調用endEditing()?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.