iOS9开放的新API--Spotlight使用指南

 更新时间:2015年11月14日 17:01:19   投稿:hebedich  
作为苹果iOS9的重要特性之一,Spotlight搜索如今重新回到主界面最左侧(同样支持主界面下滑呼出),通过API的支持,还带来了全新的Universal Search通用搜索功能,除了网络以及系统本身内容之外,还能直接搜索第三方应用内的相关内容。下面我们就来详细研究下Spotlight

1.Spotloight是什么?

  Spotlight在iOS9上做了一些新的改进, 也就是开放了一些新的API, 通过Core Spotlight Framework你可以在你的app中集成Spotlight。集成Spotlight的App可以在Spotlight中搜索App的内容,并且通过内容打开相关页面。

  Demo演示

  

2.如何集成Spotlight

  a.添加所需要的框架 

复制代码 代码如下:

#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 90000
#import <CoreSpotlight/CoreSpotlight.h>
#import <MobileCoreServices/MobileCoreServices.h>
#endif

  注,很多APP都是支持iOS9以下的,因此加入#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 90000,可以解决iOS9以下设备运行崩溃的问题

  b.创建CSSearchableItemAttributeSet 对象

复制代码 代码如下:

CSSearchableItemAttributeSet *attributeSet = [[CSSearchableItemAttributeSet alloc] initWithItemContentType:(NSString *)kUTTypeImage];
   
    attributeSet.title = spotlightTitle;                // 标题
    attributeSet.keywords = keywords;                   // 关键字,NSArray格式
    attributeSet.contentDescription = spotlightDesc;    // 描述
    attributeSet.thumbnailData = photo;                 // 图标, NSData格式

  // 把图片转换成NSData的方法
  UIImagePNGRepresentation([UIImage imageNamed:@"xxx.png"]

  c.创建可检索条目CSSearchableItem

复制代码 代码如下:

// spotlightInfo 可以作为一些数据传递给接受的地方
// domainId      id,通过这个id来判断是哪个spotlight
CSSearchableItem *item = [[CSSearchableItem alloc] initWithUniqueIdentifier:spotlightInfo domainIdentifier:domainId attributeSet:attributeSet];

  d.添加检索入口

复制代码 代码如下:

[[CSSearchableIndex defaultSearchableIndex] indexSearchableItems:@[item] completionHandler:^(NSError * error) {
     if (error) {
        NSLog(@"indexSearchableItems Error:%@",error.localizedDescription);
     }
}];

  ========完整代码========

复制代码 代码如下:

- (void)insertSearchableItem:(NSData *)photo spotlightTitle:(NSString *)spotlightTitle description:(NSString *)spotlightDesc keywords:(NSArray *)keywords spotlightInfo:(NSString *)spotlightInfo domainId:(NSString *)domainId {
   
    CSSearchableItemAttributeSet *attributeSet = [[CSSearchableItemAttributeSet alloc] initWithItemContentType:(NSString *)kUTTypeImage];
   
    attributeSet.title = spotlightTitle;                // 标题
    attributeSet.keywords = keywords;                   // 关键字,NSArray格式
    attributeSet.contentDescription = spotlightDesc;    // 描述
    attributeSet.thumbnailData = photo;                 // 图标, NSData格式
   
    // spotlightInfo 可以作为一些数据传递给接受的地方
    // domainId      id,通过这个id来判断是哪个spotlight
    CSSearchableItem *item = [[CSSearchableItem alloc] initWithUniqueIdentifier:spotlightInfo domainIdentifier:domainId attributeSet:attributeSet];
   
    [[CSSearchableIndex defaultSearchableIndex] indexSearchableItems:@[item] completionHandler:^(NSError * error) {
        if (error) {
            NSLog(@"indexSearchableItems Error:%@",error.localizedDescription);
          
        }
    }];
}

  ========加载本地图片的使用方法========

复制代码 代码如下:
[self insertSearchableItem:UIImagePNGRepresentation([UIImage imageNamed:@"xxx.png"]) spotlightTitle:@"等风来" description:@"等风来描述" keywords:@[@"鲍鲸鲸",@"大丽花"] spotlightInfo:@"传递过去的值" domainId:@"com.wb.spotlight"];

  ========加载网络图片的使用方法========

复制代码 代码如下:
 
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        NSData * data = [NSData dataWithContentsOfURL:[NSURL URLWithString:@"http://hiphotos.baidu.com/doc/pic/item/eaf81a4c510fd9f905f61934262dd42a2934a48e.jpg"]];
        [self insertSearchableItem:data spotlightTitle:@"等风来" description:@"等风来描述" keywords:@[@"鲍鲸鲸",@"大丽花"] spotlightInfo:@"传递过去的值" domainId:@"com.wb.spotlight"];
    });

  ========删除所有spotlight的方法========

复制代码 代码如下:

[[CSSearchableIndex defaultSearchableIndex] deleteAllSearchableItemsWithCompletionHandler:^(NSError * _Nullable error) {
if (error) {
NSLog(@"%@", error.localizedDescription);
}
}];

  ========删除指定的spotlight的方法========

复制代码 代码如下:

[[CSSearchableIndex defaultSearchableIndex] deleteSearchableItemsWithDomainIdentifiers:@"domainId" completionHandler:^(NSError * _Nullable error) {
if (error) {
NSLog(@"%@", error.localizedDescription);
}
}];

  ========点击spotlight后的响应方法========

复制代码 代码如下:

- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray * _Nullable))restorationHandler {
if ([[userActivity activityType] isEqualToString:CSSearchableItemActionType]) {
NSString *uniqueIdentifier = [userActivity.userInfo objectForKey:CSSearchableItemActivityIdentifier];
// 接受事先定义好的数值,如果是多个参数可以使用把json转成string传递过来,接受后把string在转换为json
NSLog(@"传递过来的值%@", uniqueIdentifier);
}
return YES;
}

  备注:

复制代码 代码如下:

#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 90000
  // 相关spotlight的方法等
#endif

// Spotlight支持iOS9以上设备运行,对与低版本的设备需加入这个防止崩溃问题

相关文章

  • iOS屏幕根据键盘自动变化高度

    iOS屏幕根据键盘自动变化高度

    这篇文章主要为大家详细介绍了iOS屏幕根据键盘自动变化高度,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-07-07
  • 写给iOS程序员的命令行使用秘籍

    写给iOS程序员的命令行使用秘籍

    写给iOS程序员的命令行使用秘籍,多事情在命令行下处理会事半功倍,所以我就iOS程序员可能会用到的功能讲述一下,感兴趣的小伙伴们可以参考一下
    2016-03-03
  • IOS在Table View添加3D Touch功能

    IOS在Table View添加3D Touch功能

    在IOS开发中教给大家如何在Table View中添加 3D Touch Peek & Pop的功能,需要的朋友学习一下吧。
    2017-12-12
  • IOS 获取网络图片大小实例详解

    IOS 获取网络图片大小实例详解

    这篇文章主要介绍了IOS 获取网络图片大小实例详解的相关资料,需要的朋友可以参考下
    2017-06-06
  • iOS中利用inputView 弹出 picker

    iOS中利用inputView 弹出 picker

    这篇文章主要介绍了iOS中利用inputView 弹出 picker的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2016-12-12
  • IOS textField限制字节长度

    IOS textField限制字节长度

    这篇文章主要介绍了IOS textField限制字节长度的相关资料,需要的朋友可以参考下
    2016-02-02
  • IOS  手势操作详解及实例总结篇

    IOS 手势操作详解及实例总结篇

    这篇文章主要介绍了IOS 手势操作详解及实例总结篇的相关资料,需要的朋友可以参考下
    2017-01-01
  • iOS实现高效裁剪图片圆角算法教程

    iOS实现高效裁剪图片圆角算法教程

    经常看到各种高效裁剪圆角的文章,正好之前做过一点数字图像处理,所以写个裁剪圆角的算法,下面这篇文章主要给大家介绍了关于iOS实现高效裁剪图片圆角算法的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2018-06-06
  • IOS LaunchScreen设置启动图片与启动页停留时间详解

    IOS LaunchScreen设置启动图片与启动页停留时间详解

    这篇文章主要介绍了IOS LaunchScreen设置启动图片与启动页停留时间详解的相关资料,需要的朋友可以参考下
    2017-02-02
  • iOS中的UISearchBar搜索框组件基础使用指南

    iOS中的UISearchBar搜索框组件基础使用指南

    iOS开发套件中自带的UISearchBar搜索框我们平时经常可以用到,我们可以在默认的基础上修改文字颜色、背景颜色和背景图片等,这里我们稍微总结一下iOS中的UISearchBar搜索框组件基础使用指南.
    2016-05-05

最新评论