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

Tyl*_*den 5 extension-methods alert ios swift swiftui

我正在 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")
        }
    }
}

Run Code Online (Sandbox Code Playgroud)

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!")))
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

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

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

paw*_*222 6

您可以创建自定义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!")))
            }
    }
}
Run Code Online (Sandbox Code Playgroud)

并像这样使用它:

Text("1").modifier(LongPressAlertModifier(message: "Test1"))
Run Code Online (Sandbox Code Playgroud)

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

extension View {
    func addLongPressAlert(_ message: String) -> some View {
        self.modifier(LongPressAlertModifier(message: message))
    }
}
Run Code Online (Sandbox Code Playgroud)

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

Text("1").addLongPressAlert("Test 1")
Run Code Online (Sandbox Code Playgroud)

  • 工作完美,谢谢!感谢您向我介绍 ViewModifiers :) (2认同)