6

目标:

  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)
    }
}

水平排 4 个按钮,带有

  1. 然后我将此单元格放入一个表单中:
struct ToolbarBezier : View {
    var body: some View {
        HStack {
            Spacer()
            
            Form {
                PointTypeButtons()
            }
            .frame(width: 320.0)
            
        }
    }
}

嵌入在表单中的按钮和文本

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

问题:如何点击并选择按钮?我应该公开表单上的所有按钮(不是单元格)吗?问题是在这种情况下,表单将有一个巨大的代码库,我想让事情保持干净和有条理......

4

2 回答 2

9

从 beta 5 开始,SwiftUI 会将任何View包含 a 的内容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")
    }
于 2019-08-03T20:18:38.487 回答
4

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

.buttonStyle(PlainButtonStyle())
于 2021-04-29T09:34:22.163 回答