SwiftUI-表单选择器和按钮不共存

时间:2020-09-11 22:13:50

标签: swiftui

我创建了一个可重用的组件,该组件在表单中具有选择器,文本字段和按钮。但是,在存在按钮的情况下,在选择器字段上的轻击不会转到选择器。而是执行按钮代码。 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()
            }
        }
    }
}

1 个答案:

答案 0 :(得分:1)

您可以做的是将PlainButtonStyle应用于按钮。这将停止按钮的 tap 覆盖表单中的整个单元格:

Button(action: {}) {
    Text("Button")
}
.buttonStyle(PlainButtonStyle())