官方对widget的解释:App Extension Programming Guide: Today
People view Today widgets in the Today area of Notification Center. Because people configure the Today area so that it displays the information they value most, it works well to approach the design of your widget with the goal of earning a place among the user’s most important items.
extension是iOS8新开放的一种对几个固定系统区域的扩展机制,extension并不是一个独立的app,它有一个包含在app bundle中的独立bundle,extension的bundle后缀名是.appex;需要依赖于containning app。
那么如何创建widget?
创建一个工程,在该工程里添加targets:
新建过后,项目的样子
运行一下结果是
搭建简单的交互界面
文件配置:
系统生成的info.plist文件默认是使用Storyboard 实现的界面;如果你想使用代码实现是界面的搭建,需更改这个配置文件:
NSExtensionAttributes:这是一个描述扩展点具体属性的字典,就像照片编辑扩展中的PHSupportedMediaTypes一样。
NSExtensionPrincipalClass:这是扩展模板创建的主体视图控制器类,比如TodayViewController。当载体应用程序(host app)调用扩展时,扩展点会实例化这个类。
NSExtensionMainStoryboard(只适用于iOS):扩展默认的Storyboard文件,一般名为MainInterface。
特别提醒,如果你是用的Swift 可能需要在前面加上$(PRODUCT)
更新widget视图:方法为
运行结果为:
UI搭建好了,如何根据UI上的按钮或者别的触发事件进行跳转呢?
首先呢,你需要在你的项目中添加URL Type
然后在点击事件回调到TodayViewController 的时候,通过
此方法进行跳转。那么这么多按钮,如何进行不同的跳转呢,或者不同页面呢,答案在这里
你可以在Appdelegate 中的方法里,根据URL进行跳转,具体跳到哪里,你说了算,哈哈哈哈哈。
iOS 10的适配上你可以
这样处理。
未完待续。。。。Demo地址