Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何在视图上创建扩展以在长按手势时显示警报-SwiftUI_Ios_Swift_Swiftui_Alert_Extension Methods - Fatal编程技术网

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

Ios 如何在视图上创建扩展以在长按手势时显示警报-SwiftUI,ios,swift,swiftui,alert,extension-methods,Ios,Swift,Swiftui,Alert,Extension Methods,我正在使用Xcode 11.6在iOS 13上的SwiftUI中创建一个应用程序 我想在SwiftUI的视图上创建一个扩展,当用户长按视图时,它会显示一条警告消息 例如,假设我有这样一个视图: import SwiftUI struct TestView: View { var body: some View { TabView { Text("1").addLongPressAlert("Test 1&q

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

视图上的扩展如下所示:

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!")))
        }
    }
}
Text("1").modifier(LongPressAlertModifier(message: "Test1"))
我正在努力弄清楚如何正确设置它


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

您可以创建一个自定义的
视图修饰符

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!")))
            }
    }
}
然后像这样使用它:

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!")))
        }
    }
}
Text("1").modifier(LongPressAlertModifier(message: "Test1"))

您甚至可以创建自定义的
视图
扩展:

extension View {
    func addLongPressAlert(_ message: String) -> some View {
        self.modifier(LongPressAlertModifier(message: message))
    }
}
并以更方便的方式使用修改器:

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

非常好,谢谢!感谢您向我介绍ViewModifiers:)