我正在使用SwiftUI
创建一个Form
。在我的Form
中,我有一个DatePicker
、TextField
和一个SegmentedPickerStyle
。
我的TextField
正在使用.decimalPad
,我正在尝试找到最好的方法来消除键盘时,完成键入。
我试过添加一个.onTapGesture
,但是它阻止我使用我的任何拾取器。当我点击它们时,什么也没有发生。
这就是我要做的:
struct ContentView: View {
@State var date = Date()
@State var price = ""
@State private var tipPercentage = 2
let tipPercentages = [10, 15, 20, 25, 0]
var body: some View {
NavigationView {
Form {
Section {
DatePicker(selection: $date, displayedComponents: .date) {
Text("Date").bold().foregroundColor(Color.init(red: 100.0/255.0, green: 208.0/255.0, blue: 100.0/255.0))
}
HStack {
Text("Price"))
Spacer()
TextField("required", text: $price).multilineTextAlignment(.trailing).keyboardType(.decimalPad)
}
}
Section(header: Text("How much tip do you want to leave?")) {
Picker("Tip percentage", selection: $tipPercentage) {
ForEach(0 ..< tipPercentages.count) {
Text("\(self.tipPercentages[$0])%")
}
}
.pickerStyle(SegmentedPickerStyle())
}
}
.onTapGesture {
let keyWindow = UIApplication.shared.connectedScenes
.filter({$0.activationState == .foregroundActive})
.map({$0 as? UIWindowScene})
.compactMap({$0})
.first?.windows
.filter({$0.isKeyWindow}).first
keyWindow!.endEditing(true)
}
}
}
}
3条答案
按热度按时间ar5n3qh51#
删除您的.onTapGesture并将其添加到表单中:
mkshixfv2#
你会想用一些UIKit的东西来做这件事。
首先,制作一个自定义手势识别器:
然后在场景代理的场景(_:willConnectTo:options:)中添加:
这会得到在文本字段外点击会关闭键盘的行为,而不会影响在其他元素上的点击。
liwlm1x93#
仅更改选取器样式