Swift 如何使TextField退出编辑模式

Swift 如何使TextField退出编辑模式,swift,swiftui,uitextfield,Swift,Swiftui,Uitextfield,我试图将一个isEditing变量绑定到我的UIViewRepresentable下,该变量由我的SwiftUI视图中的关闭按钮控制 在UIViewRepresentable下,我创建了一个UITextfield,我想在这里完成的是点击关闭按钮,该按钮触发isEditing变量,并重置UITextfield,使其离开编辑模式。我尝试在UpdateUI视图下检测此更改 struct SearchBarViewController: UIViewRepresentable { let sea

我试图将一个
isEditing
变量绑定到我的
UIViewRepresentable
下,该变量由我的SwiftUI视图中的关闭按钮控制

UIViewRepresentable
下,我创建了一个
UITextfield
,我想在这里完成的是点击关闭按钮,该按钮触发
isEditing
变量,并重置
UITextfield
,使其离开编辑模式。我尝试在UpdateUI视图下检测此更改

struct SearchBarViewController: UIViewRepresentable {
    let searchEngine = SearchEngine()
    
    let textField = LeftPaddedTextField(frame: .zero)
    
    @Binding var text: String
    @Binding var searchArray:[String]
    @Binding var isEditing: Bool
    
    func makeUIView(context: UIViewRepresentableContext<SearchBarViewController>) -> UITextField {
        textField.delegate = context.coordinator
        textField.textColor = UIColor.gray
        
        textField.placeholder = "Where are you going?"
        textField.layer.cornerRadius = 20
        //textField.layer.borderWidth = 1.5
        textField.layer.borderColor = UIColor.tertiaryLabel.cgColor
        textField.backgroundColor = UIColor.systemGray6
        textField.borderStyle = .none
        
        textField.addTarget(context.coordinator, action: #selector(context.coordinator.textFieldDidChange), for: .editingChanged)
        
        textField.clearButtonMode = .whileEditing
        
        searchEngine.delegate = context.coordinator
        return textField
    }

    func updateUIView(_ uiViewController: UITextField, context: UIViewRepresentableContext<SearchBarViewController>) {
        if isEditing {
            return
        }
        print("update is called")
        if !isEditing {
            //textField.resignFirstResponder()
            textField.endEditing(true)
        }
    }
    
    func makeCoordinator() -> SearchBarViewController.Coordinator {
        Coordinator(self)
    }
    
    final class Coordinator: NSObject, UITextFieldDelegate, SearchEngineDelegate {
        var control: SearchBarViewController
        
        init(_ control: SearchBarViewController) {
            self.control = control
        }
        
        func resultsUpdated(searchEngine: SearchEngine) {
            self.control.searchArray = []
            if !searchEngine.items.isEmpty {
                for i in searchEngine.items {
                    if let description = i.descriptionText {
                        self.control.searchArray.append(description)
                    }
                }
            }
            print()
        }
        
        func resolvedResult(result: SearchResult) {
            print()
        }
        
        func searchErrorHappened(searchError: SearchError) {
            print("Error during search: \(searchError)")
        }
        
        func textFieldDidBeginEditing(_ textField: UITextField) {
            self.control.isEditing = true
        }
        
        func textFieldShouldClear(_ textField: UITextField) -> Bool {
            return true
        }
        
        func textFieldShouldReturn(_ textField: UITextField) -> Bool {
            self.control.textField.resignFirstResponder()
            self.control.isEditing = false
            return true
        }
    
        // Update model.text when textField.text is changed
        @objc func textFieldDidChange() {
            if let text = self.control.textField.text {
                self.control.text = text
            }
            if self.control.textField.text != "" {
                if let text = control.textField.text {
                    control.searchEngine.query = text
                }
            } else {
                self.control.searchArray = []
            }
        }
        
    }
}
但问题是它不起作用。单击关闭按钮后,
UITextField
不会退出编辑模式,我仍然可以键入。所以我想问的是,是否有办法实现这一目标


提前感谢您的帮助。

尝试使用文本字段的传入实例

func updateUIView(_ uiTextField: UITextField, context: UIViewRepresentableContext<SearchBarViewController>) {
    if isEditing {
        return
    }
    print("update is called")
    if !isEditing {
        uiTextField.resignFirstResponder()      // << here !!
        // uiTextField.endEditing(true)
    }
}
func updateUIView(uiTextField:uiTextField,context:UIViewRepresentableContext){
如果我正在编辑{
返回
}
打印(“称为更新”)
如果!我正在编辑{

uiTextField.resignFirstResponder()//谢谢您的帮助,现在可以使用了。
func updateUIView(_ uiTextField: UITextField, context: UIViewRepresentableContext<SearchBarViewController>) {
    if isEditing {
        return
    }
    print("update is called")
    if !isEditing {
        uiTextField.resignFirstResponder()      // << here !!
        // uiTextField.endEditing(true)
    }
}