iOS的Extension Widget开发
1 、初始化Today Extension项目
-
新建项目
-
布局方式
storeyboard布局
MainInterface.storeybord
纯代码编写
需要配置info.plist的俩项参数移除NSExtensionMainStoryboard键,并添加NSExtensionPrincipalClass键,使用view controller的名字作为值。
-
折叠功能
- (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; self.extensionContext.widgetLargestAvailableDisplayMode = NCWidgetDisplayModeExpanded; }
-
隐藏Today Extension
NCWidgetController *widgetController = [NCWidgetController widgetController]; [widgetController setHasContent:NO forWidgetWithBundleIdentifier:@"扩展的id"];
-
NCWidgetProviding代理
折叠代理
- (void)widgetActiveDisplayModeDidChange:(NCWidgetDisplayMode)activeDisplayMode withMaximumSize:(CGSize)maxSize {
if (activeDisplayMode == NCWidgetDisplayModeCompact){
self.preferredContentSize = CGSizeMake([UIScreen mainScreen].bounds.size.width, 110);
}
else {
self.preferredContentSize = CGSizeMake([UIScreen mainScreen].bounds.size.width, 300);
}
}
缩进
- (UIEdgeInsets)widgetMarginInsetsForProposedMarginInsets: (UIEdgeInsets)defaultMarginInsets {
return UIEdgeInsetsZero;
}
刷新Today Extension页面
- (void)widgetPerformUpdateWithCompletionHandler:(void (^)(NCUpdateResult))completionHandler {
// Perform any setup necessary in order to update the view.
// If an error is encountered, use NCUpdateResultFailed
// If there's no update required, use NCUpdateResultNoData
// If there's an update, use NCUpdateResultNewData
completionHandler(NCUpdateResultNewData);
}
2 、 与APP交互
-
跳转APP
APP设置URL Schemes
Today Extension实现跳转
- (void)jumpHomeAppEvents {
NSString *schemeString = @"demo://";
[self.extensionContext openURL:[NSURL URLWithString:schemeString] completionHandler:^(BOOL success) {
}];
}
3 、 与APP共享数据
-
创建APPGroups
登录appdeveloper网站创建APPGroups
Xcode设置APPGroups
APP存储数据
- (void)saveDataByNSUserDefaults{
NSUserDefaults* userDefault = [[NSUserDefaults alloc] initWithSuiteName:@"group.listennba.appGroup"];
[userDefault setValue:@"你好,通知栏扩展" forKey:@"haha"];
}
Today Extension读取数据
- (void)readDataFromNSUserDefaults{
NSUserDefaults * userDefault = [[NSUserDefaults alloc] initWithSuiteName:@"group.listennba.appGroup"];
NSLog(@"读取出的数据为:%@",[myDefaults objectForKey:@"haha"]);
}
实例