簡體   English   中英

Swift Defer函數似乎不適用於textField委托shouldChangeCharactersIn

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM