最近在学习点新的东西,偶然看到一篇博客说到了Today Extension ,看完那篇文章之后自己又实现了一遍,觉得还是挺有用的,避免时间久了忘记了,就写下来吧。
先说一下本篇涉及到的内容:
1、App Groups (用来两个进程之间的数据交互用的),需要配置证书。
2、Extension中怎么使用cocoapods
3、Today Extension 折叠效果
App Groups:
我们想要在两个进程之间传输一些数据,只要借助它就可以简单的实现了,首先配置一下证书

在这里新建一个APP Groups ,然后然后添加到已有的APP IDs里

新建一个singleView、再添加一个target Today Extension


完了之后应该是这个样子的

这时候运行你就会看到一个hello world 的label了,如果没有,点击编辑,把扩展添加上。这个label是系统默认的,删除掉,在MainInterface.storyboard建一个table,然后在TodayViewController里实现datasource,delegate,运行你就能看到你的table了,
前期的准备工作已经做好了,接下来我们同host app 来进行数据交互,首先打开Extension和 App的的App Groups (App的操作步骤一样)

如果之前有配置证书的话就会看到已经有了,直接勾上。
在APP中存入数据:
NSUserDefaults*defaults = [[NSUserDefaults alloc]initWithSuiteName:@"group.com.scqc.helloToday"];
[defaults setObject:@[@"1",@"2",@"3",@"4"] forKey:@"array"];
在扩展中取数据:
NSUserDefaults*defaults = [[NSUserDefaults alloc]initWithSuiteName:@"group.com.scqc.helloToday"];
_dataArray = [defaults objectForKey:@"array"];
如何在Extension中使用cocoapods呢:
其实很简单,写podfile的时候把Extension的target也写上就行了
target 'App' do
pod 'SDWebImage'
end
target 'Extension' do
pod 'SDWebImage'
end
实现一个简单的table效果,图片是用SDWebImage加载的

Tips:

第三个方法用来调节edge的,在iOS10之后便不会再调用了、edge现在可以设置为0了;
要实现折叠的效果需要设置
self.extensionContext.widgetLargestAvailableDisplayMode = NCWidgetDisplayModeExpanded;//设置可以展开
然后实现上图的第二个方法返回折叠和展开的size就可以了。
-(void)widgetActiveDisplayModeDidChange:(NCWidgetDisplayMode)activeDisplayMode withMaximumSize:(CGSize)maxSize{
if (activeDisplayMode==NCWidgetDisplayModeExpanded) {
// 调节成展开的状态
self.preferredContentSize = CGSizeMake(0, 300);//这里width是不能改变的所以写0也可以
}else{
// 调整frame成折叠状态
self.preferredContentSize = maxSize;
}
}
网友评论