侧边栏壁纸
  • 累计撰写 28 篇文章
  • 累计创建 10 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

SwiftUI添加滑动实现删除和编辑按钮

Jserv
2025-04-28 / 0 评论 / 0 点赞 / 6 阅读 / 2208 字 / 正在检测是否收录...
温馨提示:
本文最后更新于 2025-04-28,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

在我们完成这个应用程序之前,让我们做一些小的更改,以帮助完善我们所拥有的东西。

首先,如果用户查看他们的订单并决定反对其中一个项目,会发生什么?现在,我们可以添加项目,但不能删除它们,但解决这个问题并不难。

就像UIKit一样,SwiftUI的List视图可以使用IndexSet进行操作——其数据中位置的集合。因此,我们可以在OrderView中添加一个接受IndexSet的方法,并使用它从我们的订单数组中删除这些项目:

func deleteItems(at offsets: IndexSet) {
    order.items.remove(atOffsets: offsets)
}

要将其连接到SwiftUI,我们需要在ForEach中添加一个onDelete()修饰符,以显示顺序中的菜单项。这接受一个闭包,该闭包将在删除发生时执行,该闭包必须接受IndexSet并删除这些项目——基本上与我们的deleteItems(at:)方法已经所做的完全一致。

OrderView表单中的第一个部分修改为:

Section {
    ForEach(order.items) { item in
        HStack {
            Text(item.name)
            Spacer()
            Text("$\(item.price)")
        }
    }
    .onDelete(perform: deleteItems)
}

如果用户想一次删除多个项目,在SwiftUI中也很容易做到。我们刚刚添加了处理删除的方法,所以现在我们可以在导航栏中添加一个编辑按钮,让SwiftUI处理其余部分。不,真的!

OrderViewnavigationTitle()修饰符之后添加这个:

.toolbar {
    EditButton()
}

SwiftUI已经知道,编辑按钮应该在编辑和非编辑模式之间切换表格,同时在编辑和完成之间更改标题——这是我们免费获得系统默认行为的另一个例子。

让我们进入第二个升级:如果用户没有在订单中添加任何东西,我们为什么要让用户按下“下订单”按钮?这说不通,我们真的不应该允许它。所以,我们不要允许它!

以下是OrderView的这一部分现在的样子:

Section {
    NavigationLink("Place Order") {
        CheckoutView()
    }
}

我们想要的是,当我们的订单中没有项目时,可以禁用它。好吧,多亏了SwiftUI的力量,我们可以用disabled()修饰符做到这一点,像这样:

Section {
    NavigationLink("Place Order") {
        CheckoutView()
    }
}
.disabled(order.items.isEmpty)

如果您现在运行该应用程序,您会发现您可以添加一个项目,转到订单屏幕,然后删除该项目,当您的购物车为空时,下订单将自动禁用。

好多了!

[本文翻译自hackingwithswift,点击链接阅读原文]

0
  1. 支付宝打赏

    qrcode alipay
  2. 微信打赏

    qrcode weixin

评论区