У меня есть SwiftUI
Form
, который содержит Picker
, TextField
и Text
:
struct ContentView: View {
var body: some View {
Form {
Section {
Picker(selection: $selection, label: label) {
// Code to populate picker
}.pickerStyle(SegmentedPickerStyle())
HStack {
TextField(title, text: $text)
Text(text)
}
}
}
}
}
Приведенный выше код приводит к следующему пользовательскому интерфейсу:

Я могу легко выбрать второй элемент в сборщике, как показано ниже:

Ниже вы можете увидеть, что я могу начать ввод текста, нажав TextField
:

InЧтобы закрыть клавиатуру при обновлении значения Picker
, был добавлен Binding
, что можно увидеть в следующем блоке кода:
Picker(selection: Binding(get: {
// Code to get selected segment
}, set: { (index) in
// Code to set selected segment
self.endEditing()
}), label: label) {
// Code to populate picker
}
Вызов self.endEditing()
предоставляется вСледующий метод:
func endEditing() {
sendAction(#selector(UIResponder.resignFirstResponder), to: nil, from: nil, for: nil)
}
На следующем снимке экрана показано, что при выборе другого сегмента Picker
клавиатура отклоняется:

До этого момента все работает как положено. Тем не менее, я хотел бы отклонить клавиатуру при нажатии в любом месте за пределами TextField
, так как не могу понять, как отключить клавиатуру при перетаскивании Form
содержащего прокрутки вида.
Я попыталсяЧтобы добавить следующую реализацию для отклонения клавиатуры при нажатии на Form
:
Form {
Section {
// Picker
HStack {
// TextField
// Text
}
}
}.onTapGesture {
self.endEditing()
}
Ниже на следующих двух снимках экрана показано, что TextField
может стать первым респондентом и отображать клавиатуру. Клавиатура будет успешно отклонена при нажатии за пределы TextField
:

Однако клавиатура не будет закрываться при попытке выбрать другой сегментсборщика. На самом деле, я не могу выбрать другой сегмент, даже после того, как клавиатура была отклонена. Я предполагаю, что другой сегмент не может быть выбран, потому что жест касания, прикрепленный к форме, мешает выбору.
На следующем снимке экрана показан результат попытки выбрать второе значение в Picker
, когда клавиатураи жест касания реализован:

Что можно сделать, чтобы разрешить выбор сегментов Picker
, при этом позволяя клавиатуре бытьуволен при нажатии за пределами TextField
?