簡體   English   中英

為 swiftui 中的多個視圖重用代碼/屬性

[英]reuse code/properties for several views in swiftui

我們有幾個 SwiftUI 屏幕以表格形式呈現。 所有這些都可以通過單擊按鈕來解除。

所以基本上他們都有這兩個共同點:

@Environment(\.presentationMode) var presentationMode
func dismiss() {
    presentationMode.wrappedValue.dismiss()
}

我怎樣才能只聲明一次並且只在特定視圖中重用它們? 我不能使用 inheritance 因為它們是結構,擴展不能包含 state(使用支架結構除外)並將這些添加到相同視圖類型的所有實例中。

.presentationMode在當前視圖層次結構中可用,因此我們可以使用此功能在某些修飾符中包裝和管理關閉。

這是一個基於按鈕樣式的解決方案演示,因此任何按鈕都可以指定為關閉,它將關閉當前的演示文稿。

用 Xcode 12.1 / iOS 14.1 制備

在此處輸入圖像描述

struct TestReuseDismissed: View {
    @State private var isActive = false
    var body: some View {
        Button("Show Sheet") {
            isActive = true
        }
        .sheet(isPresented: $isActive) {
            Button("Dismiss", action: { 
                   // do something before dismiss here !!
                })
                .buttonStyle(DismissButtonStyle())
        }
    }
}

struct DismissButtonStyle: PrimitiveButtonStyle {
    @Environment(\.presentationMode) var presentationMode

    func makeBody(configuration: Configuration) -> some View {
        Button(action: {
            configuration.trigger()
            dismiss()
        }) { configuration.label }
    }

    func dismiss() {
        presentationMode.wrappedValue.dismiss()
    }
}

備份

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM