新建一个项目 然后– File - New - targe 新建一个TodayExtension
我们把新建的 叫做子项目 原来的叫做主项目 子项目是一个单独的app group证书
在子项目和主项目中 分别代开 App Groups
LsNewTarget 为创建的weight的名称 然后在子项目中 按照同样的方法添加 AppGroup
这样weight就创建好了 提示一个 如果没有证书 会报错 但是可以在模拟机上面跑
关于weight和主app之间的传值
发送
//group.com.LsNewTarget.app 这个是 appGroup的名字
NSUserDefaults* defaults = [[NSUserDefaults alloc]initWithSuiteName:@"group.com.LsNewTarget.app"];
[defaults setObject:@"321321" forKey:@"DSL"];
if ([defaults synchronize]) {
NSLog(@"发送成功");
}
接收
//group.com.LsNewTarget.app 这个是 appGroup的名字
NSUserDefaults *defaults = [[NSUserDefaults alloc]initWithSuiteName:@"group.com.LsNewTarget.app"];
[defaults objectForKey:@"DSL"];
if ([defaults objectForKey:@"DSL"]) {
_titleLabel.text = [defaults objectForKey:@"DSL"];
} else {
_titleLabel.text = @"没有取到值";
}
关于weight的折叠
//右上角的折叠按钮
if ([[UIDevice currentDevice].systemVersion integerValue]>=10) {
self.extensionContext.widgetLargestAvailableDisplayMode = NCWidgetDisplayModeExpanded;
}
//折叠的回调
- (void)widgetActiveDisplayModeDidChange:(NCWidgetDisplayMode)activeDisplayMode withMaximumSize:(CGSize)maxSize
{
// NCWidgetDisplayModeCompact, // Fixed height
// NCWidgetDisplayModeExpanded,
NSUserDefaults*defaults = [[NSUserDefaults alloc]initWithSuiteName:@"group.LsNewTarget"];
[defaults objectForKey:@"DSL"];
if (activeDisplayMode == NCWidgetDisplayModeCompact ) {
//高度最低为110
self.preferredContentSize = CGSizeMake([UIScreen mainScreen].bounds.size.width ,110);
} else {
//因为机子型号不一样所以最大搞多可能不一样,这里设置最大
self.preferredContentSize = CGSizeMake([UIScreen mainScreen].bounds.size.width ,MAXFLOAT);
}
}
调整大小
- (UIEdgeInsets)widgetMarginInsetsForProposedMarginInsets:(UIEdgeInsets)defaultMarginInsets
{
return UIEdgeInsetsMake(0, -20, 0, 0);
}
如果需要些输入框的话 需要presen 到一个新的界面就可以弹出键盘了
88
本文介绍如何在iOS中创建一个Today Widget扩展并与主应用通过AppGroup进行数据交换。具体包括创建Widget扩展项目、实现数据发送与接收的方法、以及如何处理Widget的折叠与展开状态。

被折叠的 条评论
为什么被折叠?



