在UIKit中,您可以使用allowMultipleSelection选择UITableView的多行-可以使用SwiftUI中的List完成吗?
Jev*_*les 12
首先将其添加到您的视图中
@State var selectedItems = Set<UUID>()
Run Code Online (Sandbox Code Playgroud)
的类型Set
取决于您使用的id:
项目的类型ForEach
接下来声明列表
List(selection: $selectedItems) {
ForEach(items, id: \.id) { item in
Text("\(item.name)")
}
}
Run Code Online (Sandbox Code Playgroud)
现在,您选择的任何内容都会添加到 selectedItems 中,Set
请记住在使用后将其清除。
gra*_*ell 11
现在,在SwiftUI中获取多重选择的唯一方法是使用EditButton
。但是,这不是您可能要使用多重选择的唯一实例,如果您EditButton
实际上没有尝试编辑任何内容时使用了多重选择,则可能会使用户感到困惑。
我认为您真正要寻找的是这样的东西:
以下是我为此创建的代码:
struct MultipleSelectionList: View {
@State var items: [String] = ["Apples", "Oranges", "Bananas", "Pears", "Mangos", "Grapefruit"]
@State var selections: [String] = []
var body: some View {
List {
ForEach(self.items, id: \.self) { item in
MultipleSelectionRow(title: item, isSelected: self.selections.contains(item)) {
if self.selections.contains(item) {
self.selections.removeAll(where: { $0 == item })
}
else {
self.selections.append(item)
}
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
struct MultipleSelectionRow: View {
var title: String
var isSelected: Bool
var action: () -> Void
var body: some View {
Button(action: self.action) {
HStack {
Text(self.title)
if self.isSelected {
Spacer()
Image(systemName: "checkmark")
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
我创建了一个自定义ToggleStyle
如下:
import SwiftUI
enum Fruit: String, CaseIterable, Hashable {
case apple = "Apple"
case orange = "Orange"
case banana = "Banana"
}
struct ContentView: View {
@State var fruits = [Bool](repeating: false, count: Fruit.allCases.count)
var body: some View {
Form{
ForEach(0..<fruits.count, id:\.self){i in
Toggle(isOn: self.$fruits[i]){
Text(Fruit.allCases[i].rawValue)
}.toggleStyle(CheckmarkToggleStyle())
}
}
}
}
struct CheckmarkToggleStyle: ToggleStyle {
func makeBody(configuration: Self.Configuration) -> some View {
HStack {
Button(action: { withAnimation { configuration.$isOn.wrappedValue.toggle() }}){
HStack{
configuration.label.foregroundColor(.primary)
Spacer()
if configuration.isOn {
Image(systemName: "checkmark").foregroundColor(.primary)
}
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1175 次 |
最近记录: |