如何在视图上创建扩展以在长按手势上显示警报-SwiftUI

时间:2020-07-30 21:54:08

标签: ios swift swiftui alert extension-methods

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

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

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

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!")))
        }
    }
}

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

有人知道如何实现这一目标吗?

1 个答案:

答案 0 :(得分:2)

您可以创建自定义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")