![](/img/trans.png)
[英]SwiftUI dragging ScrollView flickers as the keyboard is dismissing
[英]Keyboard not dismissing in SwiftUI with onTapGesture
當用戶在 TextField 之外點擊時,我正在嘗試鍛煉如何關閉 SwiftUI 中的鍵盤。 我關注了其他一些帖子,這些帖子建議在 VStack 上使用 onTapGesture 並擴展 View 協議以提供一種方法來關閉從 onTapGesture 調用的鍵盤。
這是我的內容視圖:
struct ContentView: View {
@State var text = ""
var body: some View {
VStack{
Spacer()
TextField("Text", text: $text)
Text("\(text)")
Spacer()
}
.onTapGesture {
dismissKeyboard()
}
}
}
我已經擴展了 View 協議:
extension View {
func dismissKeyboard() {
print("dismissing keyboard")
UIApplication.shared.sendAction(#selector(UIResponder.resignFirstResponder), to: nil, from: nil, for: nil)
}
}
當我運行應用程序時,只有在我點擊 Text() 區域時才會關閉鍵盤。 我會理解如果 Spacers 不存在為什么會發生這種情況,因為 VStack 僅填充它包含的視圖所需的區域,但我希望當 VStack 被推到頂部時,spacers 將允許 onTapGesture 在整個屏幕上工作和屏幕底部,但它仍然只在點擊 Text() 時有效。
當我點擊 Spacers 的位置並且僅在 Text 所在的位置時 onTapGesture 不起作用,是否有原因?
您需要像這樣設置非空背景:
ZStack {
Color.white.opacity(0.0000001)
VStack {
TextField("Text", text: $text)
Text("\(text)")
}
}
.onTapGesture {
dismissKeyboard()
}
SwiftUI 總是忽略它認為是空白的東西之上的手勢。
例如 Color.white.opacity(0) 也將被視為空白空間,如果您這樣做,點擊手勢將不起作用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.