SwiftUI:编辑部分内的列表

Posted

技术标签:

【中文标题】SwiftUI:编辑部分内的列表【英文标题】:SwiftUI: edit List inside of a Section 【发布时间】:2020-06-21 08:06:03 【问题描述】:

没有FormSection,我可以编辑列表:

var body: some View 
            List 
                ForEach(modeConfigurations.sorted, id: \.id)  item in
                    Text("\(item.defaultSortIndex)")
                
                .onMove(perform: move)
            
            .navigationBarItems(trailing:
                   EditButton()
            )
 // Body

我想在FormSection 中进行编辑,但它在那里不起作用:

var body: some View 
    Form
        Section(header: Text("Sort"))
            List 
                ForEach(modeConfigurations.sorted, id: \.id)  item in
                    Text("\(item.defaultSortIndex)")
                
                .onMove(perform: move)
            
            .navigationBarItems(trailing:
                   EditButton()
            )
         // Sort Section
     // Form
 // Body

我无法编辑,ForEach 内的Text 没有呈现为单独的行。

如何在FormSection 中编辑List

【问题讨论】:

【参考方案1】:

您应该将.navigationBarItems(trailing: EditButton()) 放在Form 上以使其正常工作。

也不需要List,因为Section 已经“表现得像”List。 (感谢@Sweeper 提及)

var body: some View 
    Form 
        Section(header: Text("Sort")) 
            // List  // <- This is not needed as Section contains an implicit list.
                ForEach(modeConfigurations.sorted, id: \.id)  item in
                    Text("\(item.defaultSortIndex)")
                
                .onMove(perform: move)
            //  // <- Removeed this as we removed `List`
         // Sort Section
     // Form
    .navigationBarItems(trailing: EditButton()) // <- Misplacing this was the issue.
 // Body

【讨论】:

我认为您也不需要ListSection 已经“表现得像”List 我知道要更改原始代码。但是正如您提到的,我决定将其添加到答案中。谢谢@Sweeper

以上是关于SwiftUI:编辑部分内的列表的主要内容,如果未能解决你的问题,请参考以下文章

SwiftUI:Firebase ForEach 列表执行编辑功能无法编辑选定的行项目

是否可以在详细视图中编辑 SwiftUI 列表元素?

SwiftUI - 列表编辑模式 - 如何更改删除按钮标题?

SwiftUI 从列表中编辑结构

SwiftUI - 如何在编辑模式下更改列表的背景

SwiftUI 列表中的可编辑文本字段