文章将依次从以下几个问题着手,进行详细说明:

1、如何为现有的工程添加widget;
2、如何绘制UI;
3、如何调起app;
4、如何与host app共享数据。
图2 添加today的target
图3 添加today之后的工程目录
这是添加Today Extension之后的工程目录。
到这里,为现有的工程添加Today Extension算是完成了,运行程序就可以看到类似图1的简单的效果了,很简单哈。
绘制UI
图4 删除默认创建的MainInterface并修改Info.plist
这里,删除默认创建的MainInterface.storyboard,并按图4所示修改Info.plist文件。(当然,习惯使用storyboard的童鞋可以略过,直接操作storyboar
图5 设置widget展示视图的大小
首先,设置widget展示视图的大小。关于widget的背景色,以及具体展示的内容大家按需绘制,这里暂且不表。
图6 设置widget视图距离左侧边界距离为0
运行程序后,会发现一个问题:绘制的内容与左侧边界有一定距离(约30px)。如何解决这个问题呢,如图6所示,TodayViewController遵守的NCWidgetProviding协议给出了解决方案。
调起app
因为extension和containing app是两个完独立的进程,所以它们之间不能直接通信(不能像应用内部点击按钮,跳转到指定页面)。为了实现widget调起app,这里通过openURL的方式来启动containing app。
- (void)openURLContainingAPP{ //通过extensionContext借助host app调起app [self.extensionContext openURL:[NSURL URLWithString:@"appextension://xxx"] completionHandler:^(BOOL success) { NSLog(@"open url result:%d",success); }];}
数据共享
图7 添加App Groups
通过App Groups提供的同一group内app共同读写区域,可以用NSUserDefaults和NSFileManager两种方式实现extension和containing app之间的数据共享。
1 通过NSUserDefaults共享数据
保存数据
- (void)saveDataByNSUserDefaults{ NSUserDefaults *shared = [[NSUserDefaults alloc] initWithSuiteName:@"group.com.xxx"]; [shared setObject:@"asdfasdf" forKey:@"widget"]; [shared synchronize];}
读取数据
- (NSString *)readDataFromNSUserDefaults{ NSUserDefaults *shared = [[NSUserDefaults alloc] initWithSuiteName:@"group.com.xxx"]; NSString *value = [shared valueForKey:@"widget"]; return value;}
2 通过NSFileManager共享数据
保存数据
- (BOOL)saveDataByNSFileManager{ NSError *err = nil; NSURL *containerURL = [[NSFileManager defaultManager] containerURLForSecurityApplicationGroupIdentifier:@"group.com.xxx"]; containerURL = [containerURL URLByAppendingPathComponent:@"Library/Caches/widget"]; NSString *value = @"asdfasdfasf"; BOOL result = [value writeToURL:containerURL atomically:YES encoding:NSUTF8StringEncoding error:&err]; if (!result) { NSLog(@"%@",err); } else { NSLog(@"save value:%@ success.",value); } return result;}
读取数据
- (NSString *)readDataByNSFileManager{ NSError *err = nil; NSURL *containerURL = [[NSFileManager defaultManager] containerURLForSecurityApplicationGroupIdentifier:@"group.com.xxx"]; containerURL = [containerURL URLByAppendingPathComponent:@"Library/Caches/widget"]; NSString *value = [NSString stringWithContentsOfURL:containerURL encoding:NSUTF8StringEncoding error:&err]; return value;}
到这里,在Today中添加应用的widget就完成了,从Today中可以浏览预设的快捷服务,在文章iOS 10 Today Widget中接着说iOS 10的适配问题。
以上所述是小编给大家介绍的 iOS10 widget实现3Dtouch 弹出菜单,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!
相关文章:
攀枝花网站建设,攀枝花营业执照网上怎么年审?
如何配置支付宝与微信支付功能?
云南网站制作公司有哪些,云南最好的招聘网站是哪个?
西安大型网站制作公司,西安招聘网站最好的是哪个?
如何自定义建站之星模板颜色并下载新样式?
音乐网站服务器如何优化API响应速度?
制作电商网页,电商供应链怎么做?
如何快速搭建高效WAP手机网站?
香港服务器WordPress建站指南:SEO优化与高效部署策略
建站主机服务器选购指南:轻量应用与VPS配置解析
如何在云指建站中生成FTP站点?
建站主机类型有哪些?如何正确选型
红河网站制作公司,红河事业单位身份证如何上传?
如何通过免费商城建站系统源码自定义网站主题与功能?
家庭服务器如何搭建个人网站?
高性能网站服务器配置指南:安全稳定与高效建站核心方案
高防服务器:AI智能防御DDoS攻击与数据安全保障
如何制作一个表白网站视频,关于勇敢表白的小标题?
怎么制作网站设计模板图片,有电商商品详情页面的免费模板素材网站推荐吗?
湖北网站制作公司有哪些,湖北清能集团官网?
Python路径拼接规范_跨平台处理说明【指导】
Python如何创建带属性的XML节点
制作ppt免费网站有哪些,有哪些比较好的ppt模板下载网站?
如何快速重置建站主机并恢复默认配置?
建站主机是什么?如何选择适合的建站主机?
洛阳网站制作公司有哪些,洛阳的招聘网站都有哪些?
如何高效完成自助建站业务培训?
胶州企业网站制作公司,青岛石头网络科技有限公司怎么样?
免费的流程图制作网站有哪些,2025年教师初级职称申报网上流程?
怎么将XML数据可视化 D3.js加载XML
官网自助建站平台指南:在线制作、快速建站与模板选择全解析
如何基于PHP生成高效IDC网络公司建站源码?
建站VPS推荐:2025年高性能服务器配置指南
清除minerd进程的简单方法
建站之星免费版是否永久可用?
如何获取免费开源的自助建站系统源码?
小捣蛋自助建站系统:数据分析与安全设置双核驱动网站优化
,在苏州找工作,上哪个网站比较好?
网站制作软件免费下载安装,有哪些免费下载的软件网站?
宝塔建站教程:一键部署配置流程与SEO优化实战指南
ui设计制作网站有哪些,手机UI设计网址吗?
香港服务器网站搭建教程-电商部署、配置优化与安全稳定指南
建站主机是否等同于虚拟主机?
厦门模型网站设计制作公司,厦门航空飞机模型掉色怎么办?
南京网站制作费用,南京远驱官方网站?
盐城做公司网站,江苏电子版退休证办理流程?
网站制作多少钱一个,建一个论坛网站大约需要多少钱?
定制建站流程步骤详解:一站式方案设计与开发指南
如何通过IIS搭建网站并配置访问权限?
常州企业网站制作公司,全国继续教育网怎么登录?
*请认真填写需求信息,我们会在24小时内与您取得联系。