gpt4 book ai didi

ios - Swift 延迟函数似乎不适用于 textField 委托(delegate) shouldChangeCharactersIn

转载 作者:行者123 更新时间:2023-11-28 11:49:42 28 4
gpt4 key购买 nike

我正在运行这段代码

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 退出函数之前执行……来自文档的

A defer statement is used for executing code just before transferring program control outside of the scope that the defer statement appears in.

因此,当您将它与 UITextFieldDelegate 方法结合使用时,textField(_:shouldChangeCharactersIn:replacementString:) 只是询问更改是否应该 被允许,在提交更改之前进行移动是有道理的。

如果您的条件得到满足,您应该调用 textField.resignFirstResponder() 然后您可以监听委托(delegate)方法来调用您的函数:

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

关于ios - Swift 延迟函数似乎不适用于 textField 委托(delegate) shouldChangeCharactersIn,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51995895/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com