當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Swift Never 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大神的英文原創作品 Never swipeActions(edge:allowsFullSwipe:content:)。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。