【问题标题】:onTapGesture To Dismiss Keyboard Makes View InoperableonTapGesture 关闭键盘使视图无法操作
【发布时间】:2021-10-27 06:09:58
【问题描述】:

我正在开发一个 SwiftUI 应用程序。在应用程序中,我有一个用作表单的自定义编码列表。它是自定义编码的原因是因为我使用的是自定义颜色。在充当导航链接的其他行中,我有 TextField 行。我的问题是,当我添加 onTapGesture 以关闭键盘时,所有其他行功能都停止工作。例如 NavigationLinks。

NavigationLink 在这里工作

ZStack(alignment: .leading, content: {
            Color.pacificBlue
                .edgesIgnoringSafeArea(.all)
            List {
                Section(header: Text("Header") {
                    NavigationLink(
                        destination: SecondaryView(),
                        label: {
                            Text("Secondary View")
                        })
                    TextField("MyField", text: self.$myField)
                }
             }
}

NavigationLink 在这里不起作用

    ZStack(alignment: .leading, content: {
                Color.pacificBlue
                    .edgesIgnoringSafeArea(.all)
                List {
                    Section(header: Text("Header") {
                        NavigationLink(
                            destination: SecondaryView(),
                            label: {
                                Text("Secondary View")
                            })
                        TextField("MyField", text: self.$myField)
                    }
                 }
    }
.onTapGesture {
  self.dismissKeyboard()
}

关闭键盘

extension View {
    func dismissKeyboard() {
        let resign = #selector(UIResponder.resignFirstResponder)
        UIApplication.shared.sendAction(resign, to: nil, from: nil, for: nil)
    }
}

有没有办法解决这个问题,而不必移动到辅助视图来添加文本。任何帮助将不胜感激。

【问题讨论】:

    标签: swiftui


    【解决方案1】:

    回答来自:SwiftUI NavigationLink in list

    以下内容适用于NavigationLink。如果你有 例如Button,这将不起作用。

    struct ContentView: View {
        @State var myField = ""
        @State private var showIt: Int? = 0  // <-- here
        
        var body: some View {
            NavigationView {
                ZStack(alignment: .leading) {
                    Color.blue.edgesIgnoringSafeArea(.all)
                    List {
                        Section(header: Text("Header")) {
                            // -- here --
                            NavigationLink(destination: Text("destination view"), tag: 1, selection: $showIt) {
                                Text("Secondary View")
                            }.disabled(true)    // <-- here
                            .onTapGesture { showIt = 1 }  // <-- here
                            TextField("MyField", text: $myField)
                        }
                    }.listStyle(.plain)
                }
                .onTapGesture {
                    self.dismissKeyboard()
                }
            }.navigationViewStyle(.stack)
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-06-11
      • 2016-03-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-24
      • 1970-01-01
      • 2013-01-05
      相关资源
      最近更新 更多