目标: 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)
}
}
2-然后我将此单元格放入一个表单:
struct ToolbarBezier : View {
var body: some View {
HStack {
Spacer()
Form {
PointTypeButtons()
}
.frame(width: 320.0)
}
}
}
问题: 点击时,我现在选择整个单元格,而不是按钮。
问题: 如何点击并选择按钮? 我应该在表单上显示所有按钮(不是单元格)吗?问题在于,在这种情况下,表单将具有庞大的代码库,我想保持内容整洁有序...
答案 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())