【问题标题】:SwiftUI - Dismiss Keyboard when Picker selectedSwiftUI - 选择选取器时关闭键盘
【发布时间】:2020-02-26 19:45:19
【问题描述】:

当另一个控件(例如日期选择器)变为活动状态时,是否有一种简单的方法可以关闭键盘或任何其他活动控件?反之亦然。

有一些解决方案可以关闭键盘,但也会禁用选择器。

可能有除 onTapGesture 之外的事件要使用。

以下是一些说明问题的示例代码。

struct TestView: View {

    @State private var firstname = ""
    @State private var surname = ""
    @State private var birthdate = Date()

    @State private var activeField: Int = 0



    var body: some View {
        Form {
            Section{
                TextField("Firstname", text: self.$firstname)
                TextField("Surname", text: self.$surname)

                TextField("Surname", text: self.$surname, onEditingChanged: { (editingChanged) in
                           if editingChanged {
                               print("TextField focused")
                           } else {
                               print("TextField focus removed")
                            self.endEditing()
                           }
                       })
            }

            Section(header: Text("Time: ")){

                DatePicker(selection: self.$birthdate, in: ...Date(), displayedComponents: .date) {
                    Text("Date of Birth")
                }
                .onTapGesture {
                   self.endEditing()
                }
                DatePicker(selection: self.$birthdate, in: ...Date(), displayedComponents: .hourAndMinute) {
                    Text("Date of Birth")
                }
            }
        }


    }

    func endEditing() {
        //UIApplication.shared.sendAction(#selector(UIResponder.resignFirstResponder), to: nil, from: nil, for: nil)

        let keyWindow = UIApplication.shared.connectedScenes
                               .filter({$0.activationState == .foregroundActive})
                               .map({$0 as? UIWindowScene})
                               .compactMap({$0})
                               .first?.windows
                               .filter({$0.isKeyWindow}).first
                       keyWindow?.endEditing(true)

    }
}

【问题讨论】:

    标签: datepicker keyboard swiftui dismiss dismissviewcontroller


    【解决方案1】:

    除了onTapGesture,您还可以添加onAppear。解决了你的顾虑

        DatePicker(selection: self.$birthdate, in: ...Date(), displayedComponents: .date) {
    
                        Text("Date of Birth")
    
                }
                .onAppear{self.endEditing()}
                .onTapGesture{self.endEditing()}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-27
      • 2020-05-17
      • 2015-05-12
      • 2020-02-20
      • 2020-02-09
      • 1970-01-01
      相关资源
      最近更新 更多