SwiftUI list 移动和选择行

Posted

技术标签:

【中文标题】SwiftUI list 移动和选择行【英文标题】:SwiftUI list Move and select rows 【发布时间】:2020-11-25 08:03:36 【问题描述】:

我正在尝试对列表行执行两个操作,如下图所示

第一个是通过使用“ForEach”和“.onMove”使其移动并重新排列它,这样就完成了,第二个是通过使用“List”和“selection”选项来制作多选行,所以也这样做了。 问题是我不能将这两个选项结合起来,因为其中一个使用“List”,另一个使用“ForEach”,当我这样做时,会发生意外行为。 有没有人可以帮我解决这个问题,拜托。

【问题讨论】:

【参考方案1】:

这是一个可能的解决方案,如何结合选择和 onMove。

struct ContentView : View 
        
    @State var items = ["Dave", "Tom", "Jeremy", "Luke", "Phil"]
    
    @State var selectedItems : Set<String> = Set<String>()
    
    var body : some View 
        NavigationView 
            List(selection: $selectedItems) 
                ForEach(items, id:\.self)  item in
                    Text(item).tag(item)
                .onMove(perform: move)
            
            .navigationBarItems(trailing: EditButton())
        
    
    
    func move(from source: IndexSet, to destination: Int) 
        items.move(fromOffsets: source, toOffset: destination)
    

【讨论】:

【参考方案2】:

在我的应用程序中,davidev 的回答有点用。它允许选择多行,并且在开始移动时会出现句柄。但是,它不允许将选择放置到新位置(即,没有移动)。仍在研究为什么它实际上不会移动。

【讨论】:

这个答案更多是对已接受答案的评论。 这并不能真正回答问题。如果您有其他问题,可以点击 进行提问。要在此问题有新答案时收到通知,您可以follow this question。一旦你有足够的reputation,你也可以add a bounty 来引起对这个问题的更多关注。 - From Review

以上是关于SwiftUI list 移动和选择行的主要内容,如果未能解决你的问题,请参考以下文章

SwiftUI List - 禁用特定行的移动?

更改选项卡式视图栏颜色 SwiftUI

如何在 SwiftUI 中结合可折叠行使用 List 自定义行内部内容?

SwiftUI 中列表行(List Row)展开和收起无动画或动画诡异的解决

SwiftUI 中列表行(List Row)展开和收起无动画或动画诡异的解决

按返回键“不”关闭软件键盘 - SwiftUI