我创建了一个可重用的组件,该组件在表单中具有选择器,文本字段和按钮。但是,在存在按钮的情况下,在选择器字段上的轻击不会转到选择器。而是执行按钮代码。 TextField工作正常。如果删除按钮代码,则选择器将发生正确的行为。那么问题是如何在该组件中同时包含这两个元素?请注意,预览会添加导航和表单,否则导航和表单将来自父视图。
var body: some View {
HStack {
if !showFee {
Spacer()
Button(action: {
withAnimation(.easeInOut(duration: 0.3)) {
self.showFee.toggle()
}
}) {
Image(systemName: "plus.circle")
.font(.largeTitle)
}
Spacer()
} else {
VStack(spacing:20) {
Picker(selection: $feeSelection, label: Text("Fee Type")) {
ForEach(0 ..< fees.count) {
Text(self.fees[$0])
}
}
TextField("Fee Amount: $", value: $feeAmount, formatter: NumberFormatter.currency)
.keyboardType(.decimalPad)
Divider()
Button(action: {
withAnimation(.easeInOut(duration: 0.3)) {
self.showFee.toggle()
}
}) {
Image(systemName: "trash.circle.fill")
.font(.largeTitle)
.foregroundColor(.red)
}
}
}
}
.padding()
}
}
struct FeeCell_Previews: PreviewProvider {
static var previews: some View {
NavigationView {
Form {
FeeCell()
}
}
}
}
答案 0 :(得分:1)
您可以做的是将PlainButtonStyle
应用于按钮。这将停止按钮的 tap 覆盖表单中的整个单元格:
Button(action: {}) {
Text("Button")
}
.buttonStyle(PlainButtonStyle())