Ios 快速延迟功能不支持';似乎无法处理文本字段委托应更改字符

Ios 快速延迟功能不支持';似乎无法处理文本字段委托应更改字符,ios,swift,Ios,Swift,我正在运行这个代码 func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool { //does stuff defer { moveResponder(textField) // this assigns a new first responder after the c

我正在运行这个代码

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语句出现的范围之外之前执行代码

因此,当您将其与
UITextFieldDelegate
方法
textField(uu1;:shouldChangeCharactersIn:replacementString:)
相结合时,它只是询问是否允许更改,移动在提交更改之前发生是有意义的

如果满足条件,则应调用
textField.resignFirstResponder()
,然后可以侦听委托方法以调用函数:

optional func textFieldDidEndEditing(_ textField: UITextField) {
    moveResponder(textField)
}
实际上是在退出函数之前执行的…从文档的

defer语句用于在将程序控制转移到defer语句出现的范围之外之前执行代码

因此,当您将其与
UITextFieldDelegate
方法
textField(uu1;:shouldChangeCharactersIn:replacementString:)
相结合时,它只是询问是否允许更改,移动在提交更改之前发生是有意义的

如果满足条件,则应调用
textField.resignFirstResponder()
,然后可以侦听委托方法以调用函数:

optional func textFieldDidEndEditing(_ textField: UITextField) {
    moveResponder(textField)
}

也许,你可以“以后”再做——即
DispatchQueue.main.async{…}
,这样你就可以从当前的呼叫层次中删除自己。你需要退出当前的第一响应者,然后再做其他的第一响应者。。尝试调用
endEditing(强制:true)
DispatchQueue.main.async{}工作得非常好谢谢!也许,你可以“以后”再做——即
DispatchQueue.main.async{…}
,这样你就可以从当前的呼叫层次中删除自己。你需要退出当前的第一响应者,然后再做其他的第一响应者。。尝试调用
endEditing(强制:true)
DispatchQueue.main.async{}工作得非常好谢谢!