iOS 小组件开发第五篇:开发可配置的小组件

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

前言

前面已经介绍了几篇关于小组件的文章,还没读过的可以先去读一下:

iOS 小组件开发第一篇:基础介绍

iOS 小组件开发第二篇:时间线

iOS 小组件开发第三篇:实战

iOS 小组件开发第四篇:小组件的尺寸

前几天介绍的都是静态的小组件,其实小组件是支持设置一些配置的,比如日历组件,当你长按小组件时,可以选择编辑小组件按钮:

然后就能看到它配置了两个开关:

再例如,Apple Card 小组件支持选择周期:

添加配置意图

如果需要添加类似的配置,需要在创建小组件的时候把 Include Configuration Intent 勾选上。

然后会发现,创建出的文件中多了一个 MyIntentWidget.intentdefinition 文件,这就是用于配置的文件:

然后再打开 MyIntentWidget.swift,可以看到 Provider 继承 IntentTimelineProvider 这个类可以把用户选择的配置同步到你的时间线中。

配置

选中 MyIntentWidget.intentdefinition,点击左侧的加号,添加一个参数:

Display Name 是参数渲染的名称,Type 是类型,目前支持很多种:

不同种类的类型可能渲染的 UI 也不一样,比如上边提到的日历小组件的开关,就是 Boolean 类型,Apple Card 的小组件用的是 Enum 类型。

所有类型我就不一一列举了,我门找几个常用的来展示一下:

首选我创建了一个字符串类型的参数,用来让用户输入名字:

然后是一个数字类型的参数,用来让用户输入年龄,注意这里的 Input 可以选择 Field 或者 Stepper,如果是 Field,则会渲染一个输入框,我选择了 Stepper,最终渲染一个可以加减的步进器。另外还可以设置最大值、最小值以及默认值:

最后我还添加了一个枚举类型的参数,可以让用户选择性别,首先选择类型的时候点击 Add Enum... 按钮,添加一个新的枚举,然后在新的页面中设置枚举值:

都配置完成后,我们来运行一下程序,长按小组件时,已经能看到 编辑小组件 这个按钮了

点击进去,可以看到我们刚刚设置的三个参数:

代码中获取参数

配置完成之后,最后一步就是要在代码中获取用户设置的这些参数的值,我们在 TimelineEntry 类中可以看到,有个 ConfigurationIntent 类型的参数:

vbnet 复制代码
struct SimpleEntry: TimelineEntry {
    let date: Date
    let configuration: ConfigurationIntent
}

点进声明中看下,发现系统已经自动帮我们生成了刚刚设置的三个参数:

less 复制代码
@available(iOS 12.0, macOS 11.0, watchOS 5.0, *) @available(tvOS, unavailable)
@objc(ConfigurationIntent)
public class ConfigurationIntent: INIntent {

    @NSManaged public var name: String?
    @NSManaged public var gender: Enum
    @NSManaged public var age: NSNumber?

}

最后我们尝试把这些参数渲染出来:

swift 复制代码
struct MyIntentWidgetEntryView : View {
    var entry: Provider.Entry

    var body: some View {
        let configuration = entry.configuration
        VStack(alignment: .leading, spacing: 10) {
            Text("姓名:\(configuration.name ?? "无")")
            Text("年龄:\(configuration.age ?? 0)")
            Text("性别:\(getGender())")
        }
        .font(.system(size: 12))
    }
    
    func getGender() -> String {
        switch entry.configuration.gender {
        case .man:
            return "男"
        case .woman:
            return "女"
        case .unknown:
            return "未知"
        }
    }
}

再运行一次,就能看到效果了,每次用户编辑完成,这些值也会自动刷新

其实现在的 Xcode 针对这些配置已经相当友好简单了,更多的配置参数大家可以自己摸索一下。

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

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

相关推荐
mascon17 分钟前
U3D打包IOS的自我总结
ios
名字不要太长 像我这样就好23 分钟前
【iOS】继承链
macos·ios·cocoa
karshey1 小时前
【IOS webview】IOS13不支持svelte 样式嵌套
ios
潜龙95271 小时前
第4.3节 iOS App生成追溯关系
macos·ios·cocoa
游戏开发爱好者810 小时前
iOS App 电池消耗管理与优化 提升用户体验的完整指南
android·ios·小程序·https·uni-app·iphone·webview
程序员老刘16 小时前
AI智能体正在颠覆App开发,不转型就淘汰
flutter·客户端·mcp
神策技术社区17 小时前
iOS 全埋点点击事件采集白皮书
大数据·ios·app
wuyoula18 小时前
iOS V2签名网站系统源码/IPA在线签名/全开源版本/亲测
ios
2501_9159184118 小时前
iOS 性能监控工具全解析 选择合适的调试方案提升 App 性能
android·ios·小程序·https·uni-app·iphone·webview
fishycx18 小时前
iOS 构建配置与 AdHoc 打包说明
ios