На самом деле это должно работать, но это не связано с ошибкой .all GestureMask
. Я отправил отзыв в Apple # FB7672055 и рекомендую сделать то же самое для всех, кого это касается, чем больше, тем лучше.
Между тем, здесь возможен альтернативный подход / обходной путь для достижения аналогичного эффекта.
Протестировано с Xcode 11.4 / iOS 13.4
extension UIApplication { // just helper extension
static func endEditing() {
UIApplication.shared.sendAction(#selector(UIResponder.resignFirstResponder), to:nil, from:nil, for:nil)
}
}
struct TestEndEditingOnNavigate: View {
@State private var cities = ["London", "Berlin", "New York"]
@State private var searchTerm = ""
@State private var tappedLink: String? = nil // track tapped link
var body: some View {
NavigationView {
Form {
Section {
TextField("Search", text: $searchTerm)
}
Section {
List {
ForEach(cities, id: \.self) { city in
self.link(for: city) // decompose for simplicity
}
}
}
}
.navigationBarTitle("City list")
}
}
private func link(for city: String) -> some View {
let selection = Binding(get: { self.tappedLink }, // proxy bindng to inject...
set: {
UIApplication.endEditing() // ... side effect on willSet
self.tappedLink = $0
})
return NavigationLink(destination: Text("city: \(city)"), tag: city, selection: selection) {
Text("\(city)")
}
}
}