iOS开发之widget实现详解

 更新时间:2016年09月24日 11:19:28   作者:三月米果  
这篇文章主要为大家详细介绍了iOS开发之widget实现,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

前言

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


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

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


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

绘制UI

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


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

    首先,设置widget展示视图的大小。关于widget的背景色,以及具体展示的内容大家按需绘制,这里暂且不表。



    运行程序后,会发现一个问题:绘制的内容与左侧边界有一定距离(约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); 
 }];
}

数据共享

    通过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 10 Today Widget中接着说iOS 10的适配问题。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • IOS实现上滑隐藏NvaigtionBar而下拉则显示效果

    IOS实现上滑隐藏NvaigtionBar而下拉则显示效果

    这篇文章给大家介绍了如何实现APP上滑时隐藏navigationBar而下拉则又会显示,虽然也是隐藏但是效果和其他完全不一样,因为以前没做过所以试着去实现一下,现在分享给大家,有需要的可以参考借鉴。
    2016-09-09
  • iOS高仿微信相册界面翻转过渡动画效果

    iOS高仿微信相册界面翻转过渡动画效果

    在图片界面点击右下角的查看评论会翻转到评论界面,评论界面点击左上角的返回按钮会反方向翻转回图片界面,真正的实现方法,与传统的导航栏过渡其实只有一行代码的区别,下面小编通过本文给大家介绍下ios高仿微信相册界面翻转过渡动画效果,一起看看吧
    2016-11-11
  • IOS 静态方法与动态方法详解

    IOS 静态方法与动态方法详解

    这篇文章主要介绍了IOS 静态方法与动态方法详解的相关资料,需要的朋友可以参考下
    2017-02-02
  • IOS 开发之查看大图的实现代码

    IOS 开发之查看大图的实现代码

    这篇文章主要介绍了IOS 开发之查看大图的实现代码的相关资料,希望通过本文能帮助到大家,需要的朋友可以参考下
    2017-10-10
  • iOS App使用SQLite之句柄的定义及数据库的基本操作

    iOS App使用SQLite之句柄的定义及数据库的基本操作

    SQLite中在定义过句柄之后就可以指向数据库,从而利用iOS应用程序进行打开或关闭等各种操作,这里我们就来看一下iOS App使用SQLite之句柄的定义及数据库的基本操作
    2016-06-06
  • iOS 对plist文件进行读写,增删改查的实例

    iOS 对plist文件进行读写,增删改查的实例

    下面小编就为大家带来一篇iOS 对plist文件进行读写,增删改查的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-02-02
  • iOS开发之获取系统相册中的图片与视频教程(内带url转换)

    iOS开发之获取系统相册中的图片与视频教程(内带url转换)

    本篇文章主要介绍了iOS开发之获取系统相册中的图片与视频教程(内带url转换),主要介绍AssetsLibrary 框架,具有一定的参考价值,有需要的可以了解一下。
    2016-11-11
  • iOS中导航栏的基本使用汇总

    iOS中导航栏的基本使用汇总

    导航栏作为iOS开发的一大空控件来说,是非常的重要这篇文章主要给大家介绍了关于iOS中导航栏的基本使用的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面随着小编来一起学习学习吧
    2018-07-07
  • iOS 配置.gitignore文件详细介绍

    iOS 配置.gitignore文件详细介绍

    这篇文章主要介绍了iOS 配置.gitignore文件详细介绍的相关资料,需要的朋友可以参考下
    2017-04-04
  • 最新ios面试试题以及解决思路分析

    最新ios面试试题以及解决思路分析

    本篇内容给大家整理了关于IOS程序员面试的试题以及相关解决方法,需要的朋友们参考一下吧。
    2017-12-12

最新评论