iOS 小组件开发第六篇:点击事件和交互

这里每天分享一个 iOS 的新知识,快来关注我吧

前言

前面已经讲了几期小组件相关的内容,在看这篇之前可以先去回顾一下:

iOS 小组件开发第一篇:基础介绍
iOS 小组件开发第二篇:时间线
iOS 小组件开发第三篇:实战
iOS 小组件开发第四篇:小组件的尺寸
iOS 小组件开发第五篇:开发可配置的小组件

今天来讲讲小组件的点击事件,以及如何响应用户的事件。

小型组件

对于小型组件(systemSmall),可以直接将 widgetURL(_:) 视图修饰符添加到小组件视图层次结构中的视图上:

css 复制代码
struct MyWidgetEntryView : View {
    var entry: Provider.Entry

    var body: some View {
        VStack {
            Text(entry.date, style: .date)
        }
        .widgetURL(URL(string: "iosnews://iosNews.com/p1=1&p2=2"))
    }
}

这样就给小组件绑定了一个 URL,当用点击这个小组件时,会调用主 App 内的回调方法,具体调用哪个方法取决于:

  1. 如果你的主 App 用 SwiftUI,则调用 onOpenURL(perform:) 方法。

  2. 如果你的主 App 用 SceneDelegate 管理生命周期,则调用 scene(_:, openURLContexts:) 方法。

  3. 如果你的主 AppAppDelegate 管理生命周期,则调用 application(_:open:options:) 方法

注意应该只在小组件的视图层次结构中添加一次 widgetURL,如果添加多个,可能会导致最终无法确定执行的是哪一个

中型组件和大型组件

对于中型组件和大型组件,不仅可以使用 widgetURL,还可以使用 Link 组件,Link 组件相当于是一个可点击的容器,上边可以设置一个自定义的 URL,比如我们在小组件上设置三个按钮:

less 复制代码
struct MyWidgetEntryView : View {
    var entry: Provider.Entry

    var body: some View {
        HStack(spacing: 10) {
            Link(destination: URL(string: "https://www.link1.com")!, label: {
                Text("链接1").foregroundColor(.blue)
            })
            
            Link(destination: URL(string: "https://www.link2.com")!, label: {
                Text("链接2").foregroundColor(.blue)
            })
            
            Link(destination: URL(string: "https://www.link3.com")!, label: {
                Text("链接3").foregroundColor(.blue)
            })
        }
        .widgetURL(URL(string: "iosnews://iosNews.com/p1=1&p2=2"))
    }
}

这时候分别点击三个链接都是可以点击的。

在 iOS 17 上 systemSmall 类型的貌似也支持 Link 组件了,关于 iOS 17 新出的可直接交互的小组件,我们后面再讲。

这里每天分享一个 iOS 的新知识,快来关注我吧

本文同步自微信公众号 "iOS新知",每天准时分享一个新知识,这里只是同步,想要及时学到就来关注我吧!

相关推荐
兔云程序1 小时前
消息称苹果iPhone系列将完全放弃LCD屏幕
ios·iphone
JackLee183 小时前
Metal 之旅之MTLLibrary
ios·metal·图形绘制·视频渲染·mtllibrary
missmisslulu1 天前
电容笔值得买吗?2024精选盘点推荐五大惊艳平替电容笔!
学习·ios·电脑·平板
GEEKVIP1 天前
手机使用技巧:8 个 Android 锁屏移除工具 [解锁 Android]
android·macos·ios·智能手机·电脑·手机·iphone
GEEKVIP1 天前
如何在 Windows 10 上恢复未保存/删除的 Word 文档
macos·ios·智能手机·电脑·word·笔记本电脑·iphone
奇客软件1 天前
iPhone使用技巧:如何恢复变砖的 iPhone 或 iPad
数码相机·macos·ios·电脑·笔记本电脑·iphone·ipad
奇客软件2 天前
如何从相机的记忆棒(存储卡)中恢复丢失照片
深度学习·数码相机·ios·智能手机·电脑·笔记本电脑·iphone
GEEKVIP2 天前
如何修复变砖的手机并恢复丢失的数据
macos·ios·智能手机·word·手机·笔记本电脑·iphone
一丝晨光2 天前
继承、Lambda、Objective-C和Swift
开发语言·macos·ios·objective-c·swift·继承·lambda