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

标签 ios swift swiftui alert extension-methods

我正在 Xcode 11.6 的 iOS 13 上的 SwiftUI 中创建一个应用程序
我想在 SwiftUI 的 View 上创建一个扩展,当用户长按 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!")))
        }
    }
}
我正在努力弄清楚如何正确设置它。
有谁知道如何实现这一目标?

最佳答案

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

关于ios - 如何在 View 上创建扩展以在长按手势上显示警报 - SwiftUI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63181915/

相关文章:

ios - FMDB 错误 - 未知列名

ios - 如何检测我是否在 iOS 中使用未记录的 api

ios - 我们什么时候应该在 RxSwift 中调用 addDisposableTo(disposeBag)?

ios - 以编程方式转至 SwiftUI View

swiftui - 仅在第一页上隐藏导航栏 - Swift UI

objective-c - iOS 中的 PDF 包

iOS 自动布局问题 : Unable to simultaneously satisfy constraints

ios - 如何为 UITableView (Swift) 定义这个 numberOfRowsInSection

ios - 如何对CoreData中的相关对象进行排序?

ios - 从数组中删除 - fatal error : Index out of range - SwiftUI Binding