gpt4 book ai didi

SwiftUI 如何使用滑动禁用行删除?

转载 作者:行者123 更新时间:2023-12-03 23:35:32 25 4
gpt4 key购买 nike

我在 SwiftUI 中使用 Xcode 11.1。

我使用以下代码实现了列表删除和排序功能。

如何使用滑动禁用行删除?

import SwiftUI

struct ContentView: View {
@State var fruits = ["Apple", "Orange", "Banana"]

var body: some View {
NavigationView {
List {
ForEach(fruits, id: \.self) { fruit in
Text(fruit)
}
.onMove(perform: move)
.onDelete(perform: delete)
}
.navigationBarItems(trailing: EditButton())
}
}

func delete(offsets: IndexSet) {
fruits.remove(atOffsets: offsets)
}

func move(source: IndexSet, destination: Int) {
fruits.move(fromOffsets: source, toOffset: destination)
}
}

最佳答案

您可以使用 .deleteDisabled(_ isDisabled:)修饰符。但是你要考虑这个修饰符的返回类型是View ,不是 Text .所以实现起来有点复杂。
您可以使用此示例:

  • 创建一个 CellView像这样:

  • struct CellView: View {
    var title: String
    var isDeletable: Bool

    var body: some View {
    return Text(title).deleteDisabled(!isDeletable)
    }
    }

    您可以使用 VStack 设计您的单元格s, HStack s 等等,但您应该考虑在此层次结构的父级上使用此修饰符。如下图所示:

    var body: some View {
    HStack {
    VStack {
    ZStack {
    ...
    }
    }
    }
    .deleteDisabled(!isDeletable)
    }
  • 之后您可以在您的 ForEach 中使用它如下图:

  • struct ContentView: View {
    @State var fruits = ["Apple", "Orange", "Banana"]

    var body: some View {
    NavigationView {
    List {
    ForEach(fruits, id: \.self) { fruit -> CellView in
    if fruit == "Orange" {
    return CellView(title: fruit, isDeletable: true)
    } else {
    return CellView(title: fruit, isDeletable: false)
    }
    }
    .onMove(perform: move)
    .onDelete(perform: delete)
    }
    .navigationBarItems(trailing: EditButton())
    }
    }

    func delete(offsets: IndexSet) {
    fruits.remove(atOffsets: offsets)
    }

    func move(source: IndexSet, destination: Int) {
    fruits.move(fromOffsets: source, toOffset: destination)
    }
    }

    关于SwiftUI 如何使用滑动禁用行删除?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58568269/

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