swift - 我们如何在 SwiftUi 的另一个视图中传递布尔状态
问题描述
我必须将不同的结构合二为一。我在主视图中有一个复选框(selectAll),在另一个视图中有其他复选框。当我单击全选时,它工作正常并且全部被选中,但是如果我取消选中以下任何列表,则 selectAll 复选框仍处于选中状态。selectAll 是一个布尔状态。我想取消选中它。列表切换上的功能是另一个不在 selectAll 类中的类。谢谢任何帮助将不胜感激。
这是复选框列表代码
Button(action: {
print("to action")
self.packDto.selected.toggle()
if self.packDto.selected {
self.selectedPacks.selectedPackIdList.append(self.packDto.id)
// self.selectedPacks.selectedPackIdList.append(1)
} else {
if self.selectedPacks.selectedPackIdList.contains(self.packDto.id) {
self.selectedPacks.selectedPackIdList.remove(at: self.selectedPacks.selectedPackIdList.firstIndex(of: self.packDto.id)!)
} }
self.selectedPacks.objectWillChange.send()
self.selectedCount += (self.packDto.selected ? 1 : -1)
self.parentObservablePublisher.send()
print(String(self.selectedPacks.selectedPackIdList.count)
}, label: {
Image(systemName: (self.packDto.customsDeclarationId == nil || self.customsDeclarationId == self.packDto.customsDeclarationId) && self.selectableStatusId.contains(packDto.statusId) ?
(packDto.selected ? "checkmark.rectangle.fill" : "rectangle")
: "slash.circle").resizable().scaledToFit()
.frame(width: 50, height: 50)
.padding(.top, 2)
.padding(.bottom, 2)
})
This is main view code where select all is being called
func selectAllPackets() {
self.selectAll.toggle()
for (index, dto) in self.packListViewModel.packDtoList.enumerated() {
// TODO selectable pack status id
if (dto.statusId == PackStatusEnum.WAITING_LOGISTIC.rawValue ) && dto.selected != self.selectAll {
dto.selected = self.selectAll
selectedCount += (self.selectAll ? 1 : -1)
print("In maın",selectedCount)
self.packListViewModel.packDtoList[index] = dto.copy() as! PackDtoprint(self.selectAll)}} self.packListViewModel.objectWillChange.send()}
解决方案
试试这个。
所以 selectAll 切换将启用/禁用所有子切换。
struct ParentView: View {
@State var selectAll = false
@State var selectOne = false
var body: some View {
VStack {
Toggle("Select all", isOn: $selectAll).onChange(of: selectAll) { value in
selectOne = selectAll
}
ChildView(selectAll: $selectAll, selectOne: $selectOne)
}
}
}
struct ChildView: View {
@Binding var selectAll: Bool
@Binding var selectOne: Bool
var body: some View {
Toggle("Select one", isOn: $selectOne).onChange(of: selectOne) { value in
if !selectOne {
selectAll = false
}
}
}
}
推荐阅读
- apache-spark - pyspark 哈希是否保证不同输入的唯一结果?
- javascript - Discord 机器人删除命令
- wordpress - 在类别列表下提取单个帖子特色图像
- python - Python 避免使用 for 循环或需要缩短代码库
- sql - 当 Event Action = "something" 时更新 GA 的事件类别
- angular - Angular - 单击时动态 ngDropdown 不扩展
- git - 如何从 PyCharm 共享我在 GitHub 上的整个存储库?
- html - 如何创建打开电子邮件的链接到您的个人电子邮件地址
- amazon-web-services - AWS Amplify 在上传 GraphQL Schema 后删除“id”字段
- protocol-buffers - Protobufs in Production - 在生产中包含编译器不是很重吗?