iOS开发 widget构建详解及实现代码

 更新时间:2016年11月03日 16:16:19   投稿:lqh  
这篇文章主要介绍了iOS开发 widget构建详解的相关资料,并附实例代码,需要的朋友可以参考下

iOS开发之widget实现

前言

    iOS extension的出现,方便了用户查看应用的服务,比如用户可以在Today的widgets中查看应用的简略信息,然后点击进入相关的应用界面。
暂且不表网络上现有的widget文章,本篇文章主要说明本人具体实现widget的步骤,希望能够帮助到需要实现widget的同行朋友。


图1 Today的widget展示----以支付宝为例说明

文章将依次从以下几个问题着手,进行详细说明:
1、如何为现有的工程添加widget;
2、如何绘制UI;
3、如何调起app;
4、如何与host app共享数据。

添加Today Extension


图2 添加today的target

   如图,为现有的工程添加Today Extension,命名这里不赘述了,大家都懂的。


图3 添加today之后的工程目录

    这是添加Today Extension之后的工程目录。
    到这里,为现有的工程添加Today Extension算是完成了,运行程序就可以看到类似图1的简单的效果了,很简单哈。

绘制UI

    与网上发表文章的童鞋们一样,我也是个代码控(装B一下),习惯用纯代码来绘制Today的UI。


图4 删除默认创建的MainInterface并修改Info.plist

    这里,删除默认创建的MainInterface.storyboard,并按图4所示修改Info.plist文件。(当然,习惯使用storyboard的童鞋可以略过,直接操作storyboard即可)


图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.c om.xxx"]; [shared setObject:@"asdfasdf" forKey:@"widget"]; [shared synchronize]; 
}
读取数据
- (NSString *)readDataFromNSUserDefaults{ NSUserDefaults *shared = [[NSUserDefaults alloc] initWithSuiteName:@"group.c om.xxx"]; NSString *value = [shared valueForKey:@"widget"]; return value;
 }

2 通过NSFileManager共享数据

保存数据
- (BOOL)saveDataByNSFileManager{ NSError *err = nil; NSURL *containerURL = [[NSFileManager defaultManager] containerURLForSecuri tyApplicationGroupIdentifier:@"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] containerURLForSecuri tyApplicationGroupIdentifier:@"group.com.xxx"]; containerURL = [containerURL URLByAppendingPathComponent:@"Library/Caches/ widget"]; NSString *value = [NSString stringWithContentsOfURL:containerURL encoding: NSUTF8StringEncoding error:&err]; return value; 
}

    到这里,在Today中添加应用的widget就完成了,从Today中可以浏览预设的快捷服务.

      感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

相关文章

  • iOS创建对象的不同姿势详解

    iOS创建对象的不同姿势详解

    这篇文章主要介绍了iOS创建对象的不同姿势,文中介绍的很详细,对大家具有一定的参考价值,有需要的朋友们下面来一起学习学习吧。
    2017-02-02
  • iOS中使用NSProgress类来创建UI进度条的方法详解

    iOS中使用NSProgress类来创建UI进度条的方法详解

    NSProgress是iOS7以后引入的用于制作进度条的类,能够监听多个任务,这里就为大家带来iOS中使用NSProgress类来创建UI进度条的方法详解,需要的朋友可以参考下
    2016-06-06
  • 谈谈XCode9的新变化

    谈谈XCode9的新变化

    这篇文章主要介绍了谈谈XCode9的新变化,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-09-09
  • iOS基于UITableView实现多层展开与收起

    iOS基于UITableView实现多层展开与收起

    这篇文章主要为大家详细介绍了iOS基于UITableView实现多层展开与收起的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-03-03
  • iOS实现对不同分辨率设备的字号大小适配方法

    iOS实现对不同分辨率设备的字号大小适配方法

    下面小编就为大家分享一篇iOS实现对不同分辨率设备的字号大小适配方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-01-01
  • iOS开发实现简单计算器功能

    iOS开发实现简单计算器功能

    这篇文章主要为大家详细介绍了iOS开发实现简单计算器功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-01-01
  • 使用scrollTop()解决IOS中输入法遮挡输入框问题

    使用scrollTop()解决IOS中输入法遮挡输入框问题

    ios浏览器上输入法会弹出遮挡输入框问题,下面小编给大家分享scrollTop()解决IOS中输入法遮挡输入框问题,一起看看吧
    2017-09-09
  • IOS CocoaPods详细使用方法

    IOS CocoaPods详细使用方法

    自从有了CocoaPods以后,这些繁杂的工作就不再需要我们亲力亲为了,只需要我们做好少量的配置工作,CocoaPods会为我们做好一切
    2016-09-09
  • 一文详解NSSecureCoding真的安全吗

    一文详解NSSecureCoding真的安全吗

    这篇文章主要为大家介绍了NSSecureCoding安全深入解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-03-03
  • IOS 实现微信自动抢红包(非越狱IPhone)

    IOS 实现微信自动抢红包(非越狱IPhone)

    这篇文章主要介绍了IOS 实现微信自动抢红包(非越狱IPhone)的相关资料,这里对实现自动抢红包做一个详细的实现步骤,需要的朋友可以参考下
    2016-11-11

最新评论