[英]Swift defer function doesn't seem to work with textField delegate shouldChangeCharactersIn
我正在運行這段代碼
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
//does stuff
defer {
moveResponder(textField) // this assigns a new first responder after the character is input
}
return true
Defer應該在函數結束后運行。 但是,當我運行這段代碼時,響應者的確確實轉移到了新的響應者,然后實現了字符更改。 我希望在更改字符后將其移動,但是defer語句在這里無法按預期工作。 我是否缺少此功能,還是需要嘗試其他操作?
實際上, defer
在退出函數之前執行…從文檔的
在將程序控制權轉移到出現在defer語句出現的范圍之外之前,將defer語句用於執行代碼。
因此,當您將其與UITextFieldDelegate
方法textField(_:shouldChangeCharactersIn:replacementString:)
結合使用時,該方法只是詢問是否應允許進行更改,因此有意義的是該移動發生在提交更改之前。
如果滿足條件,則應調用textField.resignFirstResponder()
然后可以偵聽委托方法以調用函數:
optional func textFieldDidEndEditing(_ textField: UITextField) {
moveResponder(textField)
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.