gpt4 book ai didi

ios - 如何仅显示 SwiftUI 列表中选定的项目?

转载 作者:行者123 更新时间:2023-11-29 05:12:56 25 4
gpt4 key购买 nike

如何使列表在 editMode 为 .inactive 时显示一组选定项目,并在 editMode 为 .active 时显示所有 optional ,以便用户可以更改选定项目组?这是我尝试过的:

import SwiftUI

struct SelectionView: View {
@Environment(\.editMode) var editMode
@State var selectedItems = Set<String>(["1-item", "2-item", "3-item", "4-item"])
let allItems = ["1-item", "2-item", "3-item", "4-item"]
var items: [String] {
if editMode?.wrappedValue == .inactive {
return Array(selectedItems)
}
else {
return allItems
}
}

var body: some View {
NavigationView {
List(items, id: \.self, selection: $selectedItems) { item in
Text(item)
}
.navigationBarItems(trailing: EditButton())
.navigationBarTitle("Items")
}
}
}

所选数组现在是无序的,因为它是从一组生成的,我最终希望它按正确的顺序排列。但我首先尝试让列表按原样工作。

最佳答案

这是它对我有用的方法。不幸的是,由于 List 内部细节(或错误),它并不完全好......

这个想法是根据所选项目来切换 List 的容器过滤其中之一,而切换本身取决于 EditMode 的手动跟踪

无论如何,它可以工作(使用 Xcode 11.2/iOS 13.2 以及预览版进行测试)

struct SelectionView: View {
@State var editMode: EditMode = .inactive // ! Needed manual to track states

@State var selectedItems = Set<String>(["1-item", "2-item", "3-item", "4-item"])
let allItems = ["1-item", "2-item", "3-item", "4-item"]
var items: [String] {
allItems.filter { self.selectedItems.contains($0) }
}

@State var applyFilter = false
var body: some View {
NavigationView {
VStack {
List(applyFilter ? items : allItems, id: \.self,
selection: $selectedItems) { item in
Text(item)
}
.navigationBarItems(trailing: EditButton())
.navigationBarTitle("Items")
}
// .environment(\.editMode, $editMode) // << this is how it should be, but crash
.environment(\.editMode, Binding<EditMode>(get: { self.editMode },
set: {
self.editMode = $0

// !!! below is needed workaround, because applying filter directly
// on close EditMode result in crash due to cached List internals
// until switch EditMode animation is finished completely
if $0 == .inactive {
DispatchQueue.main.asyncAfter(deadline: .now() + 0.2) {
self.applyFilter = true
}
} else {
self.applyFilter = false
}
}))
}
}
}

关于ios - 如何仅显示 SwiftUI 列表中选定的项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59505273/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com