欢迎访问移动开发之家(rcyd.net),关注移动开发教程。移动开发之家  移动开发问答|  每日更新
页面位置 : > > > 内容正文

iOS Today Extension/widget编程小记

来源: 开发者 投稿于  被查看 27348 次 评论:24

iOS Today Extension/widget编程小记


从iOS8开始,下拉的”今天”里,应用可以添加自己的小widget,就是下图这样的东西:
这里写图片描述

这个东西在Android里叫widget,不过在iOS中我们叫它Today Extension,因为它是iOS中众多种类的extensions中的一种。

Extensions有很多种,Today Extension之外,还有包括Share、Action、Photo Editing、Document Provider、Custom Keyboard、Watch App这些;其中一些很熟悉,像Watch App,另外一些可能不太熟悉;今天主要来研究Today Extension。<喎?http://www.Bkjia.com/kf/ware/vc/" target="_blank" class="keylink">vcD4NCjxwPsrXz8ijrMjnus60tL2o0ru49lRvZGF5IEV4dGVuc2lvbsTYo7+63LzytaWjrNTa0tHT0LXEz+7Ev8Dvo6zU2lhjb2RlwO+jrNGh1PFGaWxlLU5ldy1UYXJnZXQtQXBwbGljYXRpb24gRXh0ZW5zaW9uLVRvZGF5IEV4dGVuc2lvbqOs0MK9qNK7uPZ0YXJnZXSjrMjnz8LNvMv5yr6hozxiciAvPg0KPGltZyBhbHQ9"这里写图片描述" src="http://www.2cto.com/uploadfile/Collfiles/20150901/2015090108360925.png" title="\" />
这样,一个Today Extension就建好啦。Run一下(就是那个new name,一个空的Today Extension):
这里写图片描述

是的,创建一个Today Extension就是这么简单。对于开发者来说,一个Today Extension其实就是一个有点儿特殊的UIViewController;我们可以向这个View Controller中添加subviews,执行任务,等等。不过在开发的过程中,还有一些常见的问题:

怎么跳转到主App?

对于Today Extension来讲,主App的官方名称叫Containing App;widget并没有什么特殊的方式跟Containing App交互,只能跟其它App一样,调用URL Scheme来跳转到Containing App中,执行一些特定操作。

如何确定Today Extension的高度和宽度?

对于Today Extension来说,它的宽度是不能变的,就是屏幕的宽度;而它的高度可以根据内容动态变化。苹果推荐我们使用auto layout,这样Today Extension的高度就可以自适应变化;如果不用auto layout的话,还可以调用

self.preferredContentSize = CGSizeMake(0,100);

来将其高度定为100;

如何定时/下拉时刷新?

定时刷新很简单,用NSTimer就可以,只是要注意dealloc的时候,将NSTimer销毁;

对于下拉刷新,我们就要先搞清楚,下拉的时候,都调用了哪些方法。刚才讲了,Today Extension其实就是一个View Controller,因此它的生命周期,也是viewDidLoad-viewWillAppear-viewDidAppear-viewWillDisappear-viewDidDisappear-dealloc这个路子。也就是说,每次下拉展示Today Extension的时候,都会将这个流程走一遍,所以我们只要在viewDidLoad里调用最新结果就可以了。

如何修改Icon旁边的名字?
默认的名字都是Containing App的Bundle Name,不过我们可以修改这个名字,方法:在Info.plist里,修改Bundle display name。

苹果对Today Extension的建议:苹果认为,Today Extension就是一个执行简单操作、界面也简单的地方,不应当有复杂的界面、复杂的操作。因此最好不要在这里搞的很复杂,否则可能会在提交审核的时候被拒掉。

一些需要注意的地方:

Today Widget是不支持键盘输入的,所以诸如UITextField、UITextView之类的控件不应当放进来。

一般情况下,要避免使用UIScrollView,因为Today View本身就是一个scroll view,这样的话会让用户困惑,在操作的时候容易误操作。

Today Extension不是正常的App,因此有一些限制:

不能使用UIApplication这个类;

不能使用某些标记了NS_EXTENSION_UNAVAILABLE的API,以及一些诸如Health Kit、Event Kit的framework;

不能获取相机、麦克风;

不能长时间运行background tasks;

不能通过AirDrop得到数据,但可以向AirDrop发送数据;

以上就是关于Today Extension的普通问题,还有一些高端的情况,比如增加view时刷新高度、确定extension在特定情况下出现/特定情况下消失,等等情况,还有待进一步研究。

 

用户评论