簡體   English   中英

使用 onTapGesture 在 SwiftUI 中鍵盤未關閉

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM