SwiftUI - Закрыть клавиатуру при прокрутке - PullRequest
0 голосов
/ 24 октября 2019

У меня есть простой список поиска:


struct ContentView: View {
    @State var text:String = ""
    var items = 1...100
    var body: some View {
        VStack {
            List {
                TextField("Search", text: $text)
                Section{
                    ForEach(items.filter({"\($0)".contains(text)}),id: \.self){(i) in
                       Text("option \(i)")
                    }
                }
            }
        }
    }
}

iOS simulator screenshot

Как мне закрыть клавиатуру при прокрутке более чем на 2 ячейки / несколькопункты?

1 Ответ

0 голосов
/ 25 октября 2019

Подробное обсуждение вопроса об отставке клавиатуры с различными ответами можно найти для этого вопроса .

Одним из решений переназначения клавиатуры при помощи жеста перетаскивания в списке является использование метода в окне приложения UIA, как показано ниже. Для упрощения обработки я создал расширение для UIApplication и модификатор представления для этого расширения и, наконец, расширение для View:

extension UIApplication {
    func endEditing(_ force: Bool) {
        self.windows
            .filter{$0.isKeyWindow}
            .first?
            .endEditing(force)
    }
}

struct ResignKeyboardOnDragGesture: ViewModifier {
    var gesture = DragGesture().onChanged{_ in
        UIApplication.shared.endEditing(true)
    }
    func body(content: Content) -> some View {
        content.gesture(gesture)
    }
}

extension View {
    func resignKeyboardOnDragGesture() -> some View {
        return modifier(ResignKeyboardOnDragGesture())
    }
}

Так что последний модификатор для отставки клавиатуры - это всего лишь один модификатор, который должен быть помещен вВот такой список:

List {
    ForEach(...) {
        //...
    }
}
.resignKeyboardOnDragGesture()

Я также реализовал чистую версию панели поиска swiftUI, которая может быть вам интересна. Вы можете найти его в этом ответе .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...