与小部件内的项目互动 iOS14

Interact with item inside widgets iOS14

我正在尝试创建一个类似于 YouTube Music 的中型 Widget,但我不明白如何在 Widget 中创建与特定项目的交互。当用户按下第一个或第二个项目时,我的应用程序应该如何理解,然后我必须如何在应用程序内处理此操作。我的应用程序使用 Swift 而不是 SwiftUI,仅用于我使用 SwiftUI 的小部件。过去我没有使用过 SwityUI.

我的小部件代码:

struct WidgetTestEntryView : View {
    var entry: Provider.Entry

    var body: some View {
        
        VStack {
            HStack(spacing: 100){
                Text("Favourite").foregroundColor(.white).font(.system(size: 16, weight: .bold, design: .default))
                Image("Label").resizable().frame(width: 80, height: 15, alignment: /*@START_MENU_TOKEN@*/.center/*@END_MENU_TOKEN@*/)
                
            }.frame(maxWidth: .infinity, maxHeight: 50, alignment: .center).background(Color.black).offset(y: -9)
            
            
            HStack {
                Spacer()
                Button(action: {}) {
                    Image("").resizable().frame(width: 70, height: 70)
                        .cornerRadius(10)
                        .background(Color(red: 0.218, green: 0.215, blue: 0.25))
                }.cornerRadius(10).onTapGesture {
                    let a = ViewController()
                    a.data.text = "Tap"
                }

                Button(action: {}) {
                    Image("").resizable().frame(width: 70, height: 70)
                        .cornerRadius(10)
                        .background(Color(red: 0.218, green: 0.215, blue: 0.25))
                }.cornerRadius(10).onTapGesture {
                    let a = ViewController()
                    a.data.text = "Tap"
                }

                Button(action: {}) {
                    Image("").resizable().frame(width: 70, height: 70)
                        .cornerRadius(10)
                        .background(Color(red: 0.218, green: 0.215, blue: 0.25))
                }.cornerRadius(10).onTapGesture {
                    let a = ViewController()
                    a.data.text = "Tap"
                }

                Button(action: {}) {
                    Image("").resizable().frame(width: 70, height: 70)
                        .cornerRadius(10)
                        .background(Color(red: 0.218, green: 0.215, blue: 0.25))
                }.cornerRadius(10).onTapGesture {
                    let a = ViewController()
                    a.data.text = "Tap"
                }

                Spacer().frame(width: 10, height: 10, alignment: .center)
            }.background(Color(red: 0.118, green: 0.118, blue: 0.15)).offset(y: -9)
            
            
        }.frame(maxWidth: .infinity, maxHeight: .infinity, alignment: .center).background(Color(red: 0.118, green: 0.118, blue: 0.15))
    }
}

您可以在 SwiftUI 中使用 Link 执行此操作。

Link(destination: url, label: {
  // add your UI components in this block on which you want to perform click action.
}

url: 提供一个唯一的字符串来识别主应用程序中的小部件操作。

现在在主应用程序中,在 AppDelegate.swift 文件中使用以下方法:

func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {
}

在此方法中,您可以识别来自 WidgetKit 操作的 URL。