SwiftUI List 如何识别在 macOS 上选择了哪些项目
Posted
技术标签:
【中文标题】SwiftUI List 如何识别在 macOS 上选择了哪些项目【英文标题】:SwiftUI List how to identify what item is selected on macOS 【发布时间】:2020-04-27 01:03:23 【问题描述】:这是我基于this answer 的内容。该代码当前允许用户选择一个单元格,但我无法区分 哪个 单元格被选中或执行任何代码以响应选择。总之,如何根据所选单元格的名称执行代码并在单击时执行。该单元格当前在单击的位置以蓝色突出显示,但我想识别它并根据该选择采取相应的行动。注意:我不想在编辑模式下选择单元格。另外,如何在不点击的情况下以编程方式选择单元格?
struct OtherView: View
@State var list: [String]
@State var selectKeeper = Set<String>()
var body: some View
NavigationView
List(list, id: \.self, selection: $selectKeeper) item in
Text(item)
这是一个演示选择的 gif
【问题讨论】:
【参考方案1】:我找到了一种解决方法,但必须单击文本本身——单击单元格没有任何作用:
struct OtherView: View
@State var list: [String]
@State var selectKeeper = Set<String>()
var body: some View
NavigationView
List(list, id: \.self, selection: $selectKeeper) item in
Text(item)
.onTapGesture
print(item)
【讨论】:
【参考方案2】:列表选择在编辑模式下工作,所以这里是选择使用的一些演示
struct OtherView: View
@State var list: [String] = ["Phil Swanson", "Karen Gibbons", "Grant Kilman", "Wanda Green"]
@State var selectKeeper = Set<String>()
var body: some View
NavigationView
List(list, id: \.self, selection: $selectKeeper) item in
if self.selectKeeper.contains(item)
Text(item).bold()
else
Text(item)
.navigationBarItems(trailing: HStack
if self.selectKeeper.count != 0
Button("Send")
print("Sending selected... \(self.selectKeeper)")
EditButton()
)
【讨论】:
唯一的问题是 .navigationBarItems 在 macOS 上的 SwiftUI 上不起作用【参考方案3】:为了免除您的阵痛:
import SwiftUI
struct ContentView: View
@State private var selection: String?
let list: [String] = ["First", "Second", "Third"]
var body: some View
NavigationView
HStack
List(selection: $selection)
ForEach(list, id: \.self) item in
VStack
Text(item)
TextField("Option", text: Binding(self.$selection) ?? .constant(""))
.frame(minWidth: 100, maxWidth: .infinity, minHeight: 100, maxHeight: .infinity)
此解决方案处理 @Isaac 解决的问题。
screenshot
【讨论】:
【参考方案4】:我的 2 美分用于自定义选择和操作 适用于 swift 5.1 / ios14:
见:
https://gist.github.com/ingconti/49497419e5edd84a5f3be52397c76eb4
我留下了很多调试“打印”......以便更好地理解。
【讨论】:
以上是关于SwiftUI List 如何识别在 macOS 上选择了哪些项目的主要内容,如果未能解决你的问题,请参考以下文章
SwiftUI List() 在 macOS 上不显示 .children
macOS 上的 SwiftUI:如何为 onDelete 启用 UI(从列表中删除)
SwiftUI List with Divider 但在 MacOS 中没有额外的 Insets
SwiftUI不借助ScrollViewReader和ScrollViewProxy实现List自动滚动到底部