iOS_小组件widget基本功能

创建

在当前工程里新建target

newTaget

选择Today Extension


独立应用

widget虽做为应用的扩展, 但却是两个完全独立的应用

widget上线需要单独申请 AppID 和 Bundle Identifier , 需要配置 证书 和 Provisioning Profiles(配置文件)

 

第三方pod导入, 也的重新导入一份

target 'MMWidget' dopod 'Masonry'
endtarget 'widgetDemo' dopod 'Masonry'
end

使用到的文件需要导入:

或者这样:

页面实现

默认是storyboard实现页面, 若想使用代码实现需对widget的配置文件进行修改:

	<key>NSExtension</key><dict>
<!--  storyboard 实现  --><key>NSExtensionMainStoryboard</key><string>MainInterface</string><!--  纯代码 实现  --><key>NSExtensionPrincipalClass</key><string>TodayViewController</string><key>NSExtensionPointIdentifier</key><string>com.apple.widget-extension</string></dict>

以上俩key保留一个就好.

 

打开应用

创建URL Schemes:

- (void)openApp {[self.extensionContext openURL:[NSURL URLWithString:@"wenwen://"] completionHandler:^(BOOL success) {NSLog(@"open url result: %d",success);}];
}- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary *)options {if ([url.scheme isEqualToString:@"wenwen"]) {return YES;}
}

展开/折叠

- (void)viewDidLoad {[super viewDidLoad];// iOS10 later supportif (@available(iOS 10.0, *)) {self.extensionContext.widgetLargestAvailableDisplayMode = NCWidgetDisplayModeExpanded;self.preferredContentSize = CGSizeMake(0, 110);}
}#pragma mark - 点击 展开/折叠
- (void)widgetActiveDisplayModeDidChange:(NCWidgetDisplayMode)activeDisplayMode withMaximumSize:(CGSize)maxSize {if (activeDisplayMode == NCWidgetDisplayModeCompact) {self.preferredContentSize = CGSizeMake(0, 110);} else {// 最多显示屏高self.preferredContentSize = CGSizeMake(0, 1000);}
}

 

数据共享

1.在开发者网站注册App Groups

2. 在主应用和拓展应用中将App Groups打开, 选中需要共享数据的group

 

 

3. 共享数据的两种方式

(1)NSUserDefaults 因拓展App无法访问主App的沙盒文件, 所以需要搭配App groups实例化UserDefaults

NSUserDefaults *userDefault = [[NSUserDefaults alloc] initWithSuiteName:@"group.momo.widget"];// 存
[userDefault setValue:@"momo" forKey:@"key"];// 取
label.text = [NSString stringWithFormat:@"%@", [userDefauct valueForKey:@"key"]];

(2)FileManager

  NSURL *containerURL = [[NSFileManager defaultManager] containerURLForSecurityApplicationGroupIdentifier:@"group.momo.widget"];containerURL = [containerURL URLByAppendingPathComponent:@"Library/Caches/widget"];NSError *error = nil;// 写入BOOL result = [string writeToURL:containerURL atomically:YES encoding:NSUTF8StringEncoding error:&error];if (result) {NSLog(@"写入成功");} else {NSLog(@"写入失败 %@", error.description);}// 读取NSString *string = [NSString stringWithContentsOfURL:containerURL encoding:NSUTF8StringEncoding error:&error];if (error) {NSLog(@"读取失败 %@", error.description);} else {NSLog(@"读取成功");}

Demo下载地址

遇到的问题:

1. 我们的项目widget数据分析失败, 最后找到原因, 是因为项目里有俩entitlements文件, 需要配置

2. framework not found *****

Targets -> General -> Linked Farmeworks and Libraries

将你需要分framework手动导入就行

 

3. 可能很多人会问widget新建工程默认实现的方法widgetPerformUpdateWithCompletionHandler是做什么的?

最后搜到这篇文章, 大致知道了: 文章地址

#pragma mark - 定时更新机制// 但widget长时间显示, 而有些数据需要实时更新时, 可以通过这个方法更新数据- (void)widgetPerformUpdateWithCompletionHandler:(void (^)(NCUpdateResult))completionHandler {// 判断当前数据是否是最新的// 例:NSArray *devices = [[WWTKGroupDataManager shareInstance] readDevices];// 不是则刷新if (self.devices.count < devices.count) {self.devices = devices;[self.tableView reloadData];}completionHandler(NCUpdateResultNewData);}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/47044.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

iOS 14-Widget小组件2—实现

Widget 实现 认识与配置实现效果图支持显示方式交互数据共享刷新策略网络加载屏幕适配支持多个小部件布局例子源码其他问题参考认识与配置 上一篇文章已经做了比较详细的介绍与创建配置iOS 14-Widget小组件1—初识 实现效果图 支持显示方式 @main 入口添加.supportedFamilie…

自定义开发苹果手机显示汽车小组件

实时获取汽车数据信息实时获取汽车定位信息&#xff08;点击地址进入高德&#xff09;显示当前位置的天气情况可定制显示当前城市是否限行可定制当前城市油价信息实时刷新最新数据 感兴趣的可以私聊加群

iOS 小组件 widget

苹果官网文档&#xff08;apple developer&#xff09;widgetkit 文章目录 1.创建小组件2.编辑小组件3.数据共享4.拖动排序5.参考链接 1.创建小组件 File -> New -> Target 搜索widget,点击next 勾上Include Configuration Intent, 表示需要编辑小组件&#xff0c;点击f…

iOS 小组件 widget 编辑小组件

返回小组件专栏&#xff1a;iOS 小组件 widget 文章目录 1.编辑小组件2.intentHandler 1.编辑小组件 如下图&#xff0c;编辑小组件&#xff0c;需要在GirlWidget.intentdefinition中配置 点击右下角的加号&#xff0c;新建一个枚举类型 枚举类型改名MyEnum,并添加三个值 …

iOS 小组件开发

iOS14之后Apple引入了新的WidgetKit&#xff0c;舍弃了原有额TodayExtension。 开发准备&#xff1a; 新的WidgetExtension只能通过SwiftUI进行开发&#xff1b; Widget有三种尺寸&#xff1a;systemSmall、 systemMedium、systemLarge&#xff0c;三种尺寸对应固定的UI类型布…

iOS 小组件 widget group id, app group, 数据共享

返回小组件专栏&#xff1a;iOS 小组件 widget 主APP, 小组件&#xff0c; 小组件的intent是三个独立的target, 需要有三个bundle id和对应的配置文件。而且他们的bundle identifier是从属关系。小组件的bundle id必须以主app的bundle id作为前缀。比如主app的为“com.test”&a…

演讲实录:指标平台+AI 的技术落地和未来展望

7月14日&#xff0c;以“释放数智生产力”为主题的 Kyligence 用户大会在上海成功举行。大会现场发布了 Kyligence 最新产品家族&#xff1a;AI 数智助理——Kyligence Copilot 的预览版、一站式指标平台 Kyligence Zen 的 Cloud 和 Enterprise 版本&#xff0c;以及企业级 OLA…

程序员坐行李箱迎寒风编码 2 小时,目击者:激励我写了一篇论文!

整理 | 朱珂欣 出品 | CSDN程序人生&#xff08;ID&#xff1a;coder_life&#xff09; 对于很多程序员而言&#xff0c;工作三连无疑就是——“查 bug、改 bug 、写 bug ”。 程序员加班的话题&#xff0c;也早已经不足为奇&#xff0c;实际上除了办公室&#xff0c;地铁站…

解决Windows update medic service服务禁用不了拒绝访问

很多小伙伴发现禁用Windows update服务后没几天又自动开启&#xff0c;无法禁用自动更新就是因为Windows update medic service服务导致&#xff0c;但是在禁用Windows update medic service服务的时候又出现拒绝访问&#xff0c;如下 解决方法&#xff1a; 方法一&#xff1…

Windows10禁止更新中关于Windows Update Medic Service拒绝访问的问题

1.首先以管理员身份运行cmd输入 REG add "HKLM\SYSTEM\CurrentControlSet\Services\WaaSMedicSvc" /v "Start" /t REG_DWORD /d "4" /f 这一步已经将Windows Update Medic Service禁用了&#xff0c;但是还能恢复 2.运行“regedit”&#xff0…

windows任务计划程序拒绝访问

问题现象&#xff1a;在windows任务计划程序中添加脚本程序&#xff0c;执行相应脚本&#xff0c;报了拒绝访问和创建目录需要输入参数问题 问题分析&#xff1a;没有权限执行脚本 问题解决&#xff1a;除了填写相应位置的脚本之外&#xff0c;还需要填写起始于的脚本所在路径…

windowsupdate拒绝访问怎么解决?

很多的小伙伴在开机电脑的时候都遇到过提示windowsupdate拒绝访问那么该怎么办呢&#xff1f;下面小编就为你们带来了windowsupdate拒绝访问解决方法&#xff0c;快来一起看看吧。 windowsupdate拒绝访问怎么解决&#xff1f; 1、右击左下角开始点击“运行”。 2、随后在输入栏…

更改操作系统密码导致vcenter访问出现503问题,已经如何正确更改vcenter操作系统密码

1、问题出现原因&#xff1a;vcenter 虚拟机cpu占用过高导致卡顿&#xff0c;想扩容cpu&#xff0c;需要关闭vcenter虚拟机&#xff0c;等扩容完启动的时候发现vcenter已启动&#xff0c;但页面访问出现503错误。 2、思路分析&#xff1a;503错误基本原因都是因为vpxd服务没有…

Windows10/11在使用微软账号登录后无法远程桌面

Windows10/11在使用微软账号登录后无法远程桌面 问题现象&#xff1a; 微软远程桌面在输入用户名密码点击”连接后”报”之前用于连接到的凭据无法工作 请输入新的凭据”的错误。 新安装的电脑开启远程桌面登录正常&#xff0c;但在启用微软账号后就无法登录&#xff0c;提示…

NVIDIA控制面板拒绝访问解决方法教学

NVIDIA控制面板拒绝访问解决方法教学分享。有用户开启英伟达显卡控制面板进行相关设置调整的时候&#xff0c;遇到了问题&#xff0c;面板提示拒绝访问。那么是什么原因导致出现这样的问题呢&#xff1f;接下来我们一起来看看以下的解决方法吧。 解决方法&#xff1a; 1、出现这…

Windows Update Medic Service拒绝访问问题

1.首先以管理员身份运行cmd输入 REG add “HKLM\SYSTEM\CurrentControlSet\Services\WaaSMedicSvc” /v “Start” /t REG_DWORD /d “4” /f 这一步已经将Windows Update Medic Service禁用了&#xff0c;但是还能恢复 2.运行“regedit”&#xff0c;打开注册表编辑器&#…

win10 你组织的安全策略阻止未经身份验证的来宾访问

网上大多数是改组策略的方法&#xff0c;但是对于不同网段的服务器&#xff0c;则无效。 请用以下方法&#xff0c;源自微软论坛&#xff1a; 方法一&#xff1a;您可以手动在注册表中创建以下表项&#xff1a; HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Pa…

WinSCP 以预设密码进行验证 拒绝访问

环境&#xff1a; Win 10专业版 Win scp 5.17.6 Ubuntu 20.04.3 问题描述&#xff1a; 第一次连接Ubuntu 20.04.3 WinSCP 以预设密码进行验证 拒绝访问 解决方案&#xff1a; 1.vim /etc/ssh/sshd_config 文件中PermitEmptyPasswords no改成yes 重启服务 service ssh r…

Windows update medic service拒绝访问

解决Windows update medic service服务禁用不了拒绝访问 很多小伙伴发现禁用Windows update服务后没几天又自动开启&#xff0c;无法禁用自动更新就是因为Windows update medic service服务导致&#xff0c;但是在禁用Windows update medic service服务的时候又出现拒绝访问&am…

Win10安装软件弹出:当前无法访问>SmartScreen

安装屏幕取词软件&#xff0c;Windows系统桌面跳出弹窗&#xff0c;提示如下&#xff1a; 【原因】&#xff1a; window Defender SmartScreen选项未生效。 【】解决办法】&#xff1a; 打开本机的“控制面板”&#xff0c;选择“网络和Internet”&#xff0c;点击按钮进入。 进…