SwiftUI-带有可点击按钮的单元格(内部表单)

时间:2019-06-22 12:51:14

标签: swiftui xcode11

目标: 1-使用按钮创建行/单元格。 在表单中嵌入2行/单元格。

我做了什么...

1-我创建了一个带有按钮的单元格。

struct PointTypeButtons : View {
var body: some View {

    VStack {
        HStack {
            Text("Aligment")
                .font(.subheadline)
            Spacer()
            }

    HStack {

        Button(action: {}) {
            Image(systemName: "text.alignleft")
            .padding(.horizontal, 25.0)
            .padding(.vertical)
            .background(Color.black)
            .cornerRadius(4)
        }
        Button(action: {}) {
            Image(systemName: "text.aligncenter")
            .padding(.horizontal, 25.0)
            .padding(.vertical)
            .background(Color.black)
            .cornerRadius(4)

        }
        Button(action: {}) {
            Image(systemName: "text.aligncenter")
            .padding(.horizontal, 25.0)
            .padding(.vertical)
            .background(Color.black)
            .cornerRadius(4)

        }
        Button(action: {}) {
            Image(systemName: "text.alignright")
            .padding(.horizontal, 25.0)
            .padding(.vertical)
            .background(Color.black)
            .cornerRadius(4)
    }

         }


    }
    .frame(height: nil)
}

}

enter image description here

2-然后我将此单元格放入一个表单:

struct ToolbarBezier : View {
var body: some View {



    HStack {

        Spacer()



            Form {


                PointTypeButtons()

                }




        .frame(width: 320.0)

    }

        }

}

enter image description here

问题: 点击时,我现在选择整个单元格,而不是按钮。

问题: 如何点击并选择按钮? 我应该在表单上显示所有按钮(不是单元格)吗?问题在于,在这种情况下,表单将具有庞大的代码库,我想保持内容整洁有序...

2 个答案:

答案 0 :(得分:3)

从beta 5开始,SwiftUI会将包含View的任何Button视为“表单按钮”。这意味着整个单元成为可点击的目标。以我的经验,如果您有多个按钮,似乎选择了最后一个按钮。

要解决此问题,您可以选择根本不使用任何按钮。而是使用onTapGesture()事件来检测点击。

这是您的图片按钮,但已转换为可点击的图片。前景色来自按钮样式,因此您现在必须明确定义它。

Image(systemName: "text.alignleft")
    .foregroundColor(Color.accentColor)
    .padding(.horizontal, 25.0)
    .padding(.vertical)
    .background(Color.black)
    .cornerRadius(4)
    .onTapGesture {
        print("align left tapped")
    }

答案 1 :(得分:1)

只需添加到您的视图 (PointTypeButtons),并会识别表单内的每个按钮点击

.buttonStyle(PlainButtonStyle())