swift开发一个Widget应用

对于从零开发一个Widget应用, 本文主要介绍如下几点:

1.为现已有工程添加Widget;

2.绘制UI;

3.App间跳转;

4.数据共享的方式;

 

1.为现有工程添加Widget

新建工程

153252_p9bF_2501614.png

选择`Today Extension`, 确认, 为工程添加Widget成功.

153321_Fz7j_2501614.png

 

2.绘制UI

和普通控制器一样, 正常的绘制UI即可, 默认工程使用SB构建, 自己可以选用代码构建, 需要注意的是, 要删除plist中相关的代码.

 

3.App间跳转

app跳转可以通过URI方式打开和传值.

extensionContext?.open(URL(string: "mainApp://controller?type=1")!, completionHandler: { (result) in

            print(result)

        })

 

4.数据共享的方式

扩展程序一般都不是脱离宿主程序单独运行的,难免需要和宿主程序进行数据交互。通过App Groups提供的同一group内app共同读写区域,可以用NSUserDefaults和NSFileManager两种方式实现extension和containing app之间的数据共享。

使用App Groups需要在主程序和widget程序中分别打开App Groups选项, 保证两个地方选择的groups相同, 如下:

154331_oIrk_2501614.png

UserDefaults方式:

//写入数据
let userDefaults = UserDefaults(suiteName: "group.com.walden.Widget-Demo")
userDefaults?.set("abcdefg", forKey: "widget")
userDefaults?.synchronize()
//读取数据
let userDefaults = UserDefaults(suiteName: "group.com.walden.Widget-Demo")
let str = userDefaults?.value(forKey: "widget") as? String

FileManager方式:

//写入数据
var containerURL = FileManager.default.containerURL(forSecurityApplicationGroupIdentifier: "group.com.walden.Widget-Demo")
containerURL = containerURL?.appendingPathComponent("Library/Caches/widget")
let value = "abcdefg"
try? value.write(to: containerURL!, atomically: true, encoding: .utf8)

//读取数据
var containerURL = FileManager.default.containerURL(forSecurityApplicationGroupIdentifier: "group.com.walden.Widget-Demo")
containerURL = containerURL?.appendingPathComponent("Library/Caches/widget")
let v = String(contentsOf: containerURL!, encoding: .utf8)

 

转载于:https://my.oschina.net/whforever/blog/1551386

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值