如何在 SwiftUI 列表行中独立选择复选框按钮和 NavigationLink 到另一个视图
Posted
技术标签:
【中文标题】如何在 SwiftUI 列表行中独立选择复选框按钮和 NavigationLink 到另一个视图【英文标题】:How to select checkbox button and NavigationLink to another view independently in SwiftUI List row 【发布时间】:2019-08-19 14:33:33 【问题描述】:我希望做一个列表就像待办事项列表一样,单元格有一个复选框和文本。我希望在选择列表单元格时,可以将视图转换为 detailView。同时我也可以选中复选框,但不要触发视图转换为详细视图。
我删除了 List,代码运行正常,但是 List 属性和方法不能再使用了。所以我打算编写一个客户列表视图。但我不认为这将是一个好方法。所以如果还是找不到好的方法,最后还是可以这样实现。
NavigationView
VStack
List
ForEach(todayDietModel.todayDietItems) item in
NavigationLink(destination: DietItemDetailView())
TodayDietRow(todayDietItem: item)
.animation(.spring())
.frame(width: 352, height: 400)
.background(Color.white)
.cornerRadius(16)
struct TodayDietRow: View
@State var isFinished: Bool = false
var body: some View
HStack(spacing: 20.0)
Button(action: self.isFinished.toggle())
if self.isFinished
Image("icon_checked_s001")
.resizable()
.renderingMode(.original)
.aspectRatio(contentMode: .fit)
.frame(width: 24, height: 24)
else
Image("icon_unchecked_s001")
.resizable()
.frame(width: 24, height: 24)
.padding(.leading, 10)
Text("DietName")
.font(.system(size:13))
.fontWeight(.medium)
.foregroundColor(Color.black)
.frame(width: 327, height: 48)
【问题讨论】:
【参考方案1】:这与复选框图像上的手势配合得很好。两个按钮不起作用,因为每次点击都会同时访问两个按钮。
struct TodayTodoView2: View
@ObservedObject var todayDietModel = TodayDietModel()
func image(for state: Bool) -> Image
return state ? Image(systemName: "checkmark.circle") : Image(systemName: "circle")
var body: some View
NavigationView
VStack
List
ForEach($todayDietModel.todayDietItems) (item: Binding<TodayDietItem>) in
HStack
self.image(for: item.value.isFinished).onTapGesture
item.value.isFinished.toggle()
NavigationLink(destination: DietItemDetailView2(item: item))
Text("DietNamee \(item.value.dietName)")
.font(.system(size:13))
.fontWeight(.medium)
.foregroundColor(Color.black)
.background(Color.white)
【讨论】:
以上是关于如何在 SwiftUI 列表行中独立选择复选框按钮和 NavigationLink 到另一个视图的主要内容,如果未能解决你的问题,请参考以下文章