【问题标题】:How to create an extension on a view to show alerts on long press gesture - SwiftUI如何在视图上创建扩展以显示长按手势警报 - SwiftUI
【发布时间】:2020-11-20 17:09:34
【问题描述】:

我正在 Xcode 11.6 中的 iOS 13 上的 SwiftUI 中创建应用程序

我想在 SwiftUI 的视图上创建一个扩展,当用户长按视图时显示警告消息。

例如,假设我有这样的视图:

import SwiftUI

struct TestView: View {
    
    var body: some View {
        TabView {
            Text("1").addLongPressAlert("Test 1")
            Text("2").addLongPressAlert("Test 2")
            Text("3").addLongPressAlert("Test 3")
        }
    }
}

View 上的扩展看起来像这样:

extension View {
   
    public func addLongPressAlert(message _ : String) -> some View {
        return self.onLongPressGesture {
            // I know this is not how you show an alert, but im unsure how to display it
            Alert(title: Text("Alert"), message: Text(m), dismissButton: .default(Text("OK!")))
        }
    }
}

我正在努力弄清楚如何正确设置它。

有谁知道如何做到这一点?

【问题讨论】:

    标签: ios swift swiftui alert extension-methods


    【解决方案1】:

    您可以创建自定义ViewModifier

    struct LongPressAlertModifier: ViewModifier {
        @State var showAlert = false
        let message: String
    
        func body(content: Content) -> some View {
            content
                .onLongPressGesture {
                    self.showAlert = true
                }
                .alert(isPresented: $showAlert) {
                    Alert(title: Text("Alert"), message: Text(message), dismissButton: .default(Text("OK!")))
                }
        }
    }
    

    并像这样使用它:

    Text("1").modifier(LongPressAlertModifier(message: "Test1"))
    

    您甚至可以创建自定义View 扩展:

    extension View {
        func addLongPressAlert(_ message: String) -> some View {
            self.modifier(LongPressAlertModifier(message: message))
        }
    }
    

    并以更方便的方式使用您的修饰符:

    Text("1").addLongPressAlert("Test 1")
    

    【讨论】:

    • 完美运行,谢谢!感谢您向我介绍 ViewModifiers :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-23
    • 2021-08-11
    • 1970-01-01
    • 2021-03-03
    • 1970-01-01
    • 2020-10-19
    相关资源
    最近更新 更多