swiftUI как иметь кнопку поиска на клавиатуре - PullRequest
0 голосов
/ 18 января 2020

В SwiftUI У меня есть простой поиск TextField, где пользователь вводит что-то для поиска и поиск по кнопке.

Я просто хочу добавить опцию, чтобы кнопка Поиск находилась в правом нижнем углу Keyboard (я видел это в каком-то приложении)

как это сделать?

1 Ответ

1 голос
/ 18 января 2020

Если я правильно понимаю, вы хотите изменить UIReturnKeyType. В этом случае вы должны использовать UIKit , поскольку пока нет никакой возможности изменить тип ключа возврата в SwiftUI . Чтобы сделать это, вы должны создать пользовательский TextField с использованием UIIKit, а затем изменить его так, как вам нравится.

Также имейте в виду, что перечисление UIReturnKeyType находится в стадии обсуждения и может быть заменено другой реализацией.

// MARK: Custom TextField
struct TextFieldTyped: UIViewRepresentable {
    let keyboardType: UIKeyboardType
    let returnVal: UIReturnKeyType
    let tag: Int
    @Binding var text: String
    @Binding var isfocusAble: [Bool]

    func makeUIView(context: Context) -> UITextField {
        let textField = UITextField(frame: .zero)
        textField.keyboardType = self.keyboardType
        textField.returnKeyType = self.returnVal
        textField.tag = self.tag
        textField.delegate = context.coordinator
        textField.autocorrectionType = .no

        return textField
    }

    func updateUIView(_ uiView: UITextField, context: Context) {
        if isfocusAble[tag] {
            uiView.becomeFirstResponder()
        } else {
            uiView.resignFirstResponder()
        }
    }

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

    class Coordinator: NSObject, UITextFieldDelegate {
        var parent: TextFieldTyped

        init(_ textField: TextFieldTyped) {
            self.parent = textField
        }

        func updatefocus(textfield: UITextField) {
            textfield.becomeFirstResponder()
        }

        func textFieldShouldReturn(_ textField: UITextField) -> Bool {

            if parent.tag == 0 {
                parent.isfocusAble = [false, true]
                parent.text = textField.text ?? ""
            } else if parent.tag == 1 {
                parent.isfocusAble = [false, false]
                parent.text = textField.text ?? ""
         }
        return true
        }

    }
}

И вы можете использовать его следующим образом: (Измените returnVal на .search в вашем случае.)

struct CustomeKT: View {

    @State var myTextForTX = ""
    @State var focused: [Bool] = [false, true]

    var body: some View {
        TextFieldTyped(keyboardType: .default, returnVal: .search, tag: 0, text: self.$myTextForTX, isfocusAble: self.$focused)
    }
}
...