SwiftUI

SwiftUI 自定义 Textfield

truct CustomTextfield: UIViewRepresentable {
    @Binding var text: String
    var keyType: UIKeyboardType
    func makeUIView(context: Context) -> UITextField {
        let textfield = UITextField()
        textfield.keyboardType = keyType
        textfield.textAlignment = .center
        textfield.delegate = context.coordinator

        let toolBar = UIToolbar(frame: CGRect(x: 0, y: 0, width: textfield.frame.size.width, height: 44))
        let flexibleSpace = UIBarButtonItem(barButtonSystemItem: UIBarButtonItem.SystemItem.flexibleSpace, target: self, action: nil)
        let doneButton = UIBarButtonItem(title: "確定", style: .done, target: self, action: #selector(textfield.doneButtonTapped(button:)))
        toolBar.items = [flexibleSpace, doneButton]
        toolBar.setItems([flexibleSpace, doneButton], animated: true)
        textfield.inputAccessoryView = toolBar
        return textfield
    }

    func updateUIView(_ uiView: UITextField, context: Context) {
        uiView.text = text
    }

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

    class Coordinator: NSObject, UITextFieldDelegate {
        var control: CustomTextfield

        init(_ control: CustomTextfield) {
            self.control = control
        }

        func textFieldShouldEndEditing(_ textField: UITextField) -> Bool {
            self.control.text = textField.text!
            return true
        }
    }
}