当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Swift Optional swipeActions(edge:allowsFullSwipe:content:)用法及代码示例


实例方法

swipeActions(edge:allowsFullSwipe:content:)

将自定义滑动操作添加到列表中的一行。

声明

func swipeActions<T>(
    edge: HorizontalEdge = .trailing,
    allowsFullSwipe: Bool = true,
    content: () -> T
) -> some View where T : View

参数

edge

与滑动操作相关联的视图边。默认值为 HorizontalEdge/trailing

allowsFullSwipe

一个布尔值,指示完全滑动是否自动执行第一个操作。默认值为 true

content

滑动动作的内容。

详述

使用此方法将滑动操作添加到充当列表中的一行的视图。指示滑动操作的起始位置 HorizontalEdge,并使用 Button 实例定义各个操作。例如,如果您有一个消息列表,您可以添加一个操作以在从前沿滑动时将消息切换为未读,以及在后沿滑动时删除或标记消息的操作:


List {
    ForEach(store.messages) { message in
        MessageCell(message: message)
            .swipeActions(edge: .leading) {
                Button { store.toggleUnread(message) } label: {
                    if message.isUnread {
                        Label("Read", systemImage: "envelope.open")
                    } else {
                        Label("Unread", systemImage: "envelope.badge")
                    }
                }
            }
            .swipeActions(edge: .trailing) {
                Button(role: .destructive) {
                    store.delete(message)
                } label: {
                    Label("Delete", systemImage: "trash")
                }
                Button { store.flag(message) } label: {
                    Label("Flag", systemImage: "flag")
                }
            }
        }
    }
}

操作按您列出的顺序显示,从滑动的起始边开始。在上面的示例中,删除操作出现在最靠近屏幕后沿的位置:

对于出现在滑动操作中的标签或图像,SwiftUI 会自动应用 SymbolVariants/fill-swift.type.property 符号变体,如上所示。

默认情况下,用户可以针对给定的滑动方向执行第一个操作,并完全滑动。对于上面的示例,用户可以通过完全滑动来执行切换未读和删除操作。您可以通过将 allowsFullSwipe 参数设置为 false 来选择退出此行为。例如,您可以禁用前沿上的完全滑动:


.swipeActions(edge: .leading, allowsFullSwipe: false) {
    Button { store.toggleUnread(message) } label: {
        if message.isUnread {
            Label("Read", systemImage: "envelope.open")
        } else {
            Label("Unread", systemImage: "envelope.badge")
        }
    }
}

当您使用 ButtonRole 枚举中的值之一为按钮设置角色时,SwiftUI 根据其角色设置按钮的样式。在上面的示例中,删除操作出现在 ShapeStyle/red 中,因为它具有 ButtonRole/destructive 角色。如果您想设置不同的颜色——例如,为了匹配应用程序 UI 的整体主题——将 View/tint(_:) 修饰符添加到按钮:


MessageCell(message: message)
    .swipeActions(edge: .leading) {
        Button { store.toggleUnread(message) } label: {
            if message.isUnread {
                Label("Read", systemImage: "envelope.open")
            } else {
                Label("Unread", systemImage: "envelope.badge")
            }
        }
        .tint(.blue)
    }
    .swipeActions(edge: .trailing) {
        Button(role: .destructive) { store.delete(message) } label: {
            Label("Delete", systemImage: "trash")
        }
        Button { store.flag(message) } label: {
            Label("Flag", systemImage: "flag")
        }
        .tint(.orange)
    }

上面代码中的修改使切换未读操作 ShapeStyle/blue 和标志操作 ShapeStyle/orange

添加滑动操作时,SwiftUI 不再合成在 ForEach 实例上使用 ForEach/onDelete(perform:) 方法时出现的删除操作。如果合适,您将负责在滑动操作中创建删除操作。

如果您在同一个列表行视图上多次调用修饰符,则针对给定边的操作会累积。

可用版本

iOS 15.0+, iPadOS 15.0+, macOS 12.0+, Mac Catalyst 15.0+, watchOS 8.0+

相关用法


注:本文由纯净天空筛选整理自apple.com大神的英文原创作品 Optional swipeActions(edge:allowsFullSwipe:content:)。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。