[英]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.