textFieldDidChangeSelection:在视图更新期间修改状态,这将导致未定义的行为

2024-05-08

这是我的代码:

struct CustomTextField: UIViewRepresentable {
    var placeholder: String
    @Binding var text: String

    func makeUIView(context: UIViewRepresentableContext<CustomTextField>) -> UITextField {
        let uiView = UITextField()
        uiView.delegate = context.coordinator

        return uiView
    }

    func updateUIView(_ uiView: UITextField, context: UIViewRepresentableContext<CustomTextField>) {
        uiView.placeholder = placeholder
        uiView.text = text

        if uiView.window != nil, !uiView.isFirstResponder {
            uiView.becomeFirstResponder()
        }
    }

    func makeCoordinator() -> Coordinator {
        Coordinator(self)
    }

    class Coordinator: NSObject, UITextFieldDelegate {
        var parent: CustomTextField

        init(_ CustomTextField: CustomTextField) {
            self.parent = CustomTextField
        }

        func textFieldDidChangeSelection(_ textField: UITextField) {
            parent.text = textField.text ?? ""
        }
    }
}

构建不会引起警告,但使用CustomTextField在模拟器中确实如此。

这是警告:

在视图更新期间修改状态,这将导致未定义的行为。

它显示在这一行:

parent.text = textField.text ?? ""

我该如何摆脱这个警告?我究竟做错了什么?


尝试异步执行修改:

func textFieldDidChangeSelection(_ textField: UITextField) {
    DispatchQueue.main.async {
        self.parent.text = self.textField.text ?? ""
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

textFieldDidChangeSelection:在视图更新期间修改状态,这将导致未定义的行为 的相关文章

随机推荐