博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS开发 iOS9 Spotlight 应用内搜索简单介绍
阅读量:6857 次
发布时间:2019-06-26

本文共 4485 字,大约阅读时间需要 14 分钟。

还是直插正题,有错误请指出。

Spotlight这个功能很早就有了,可能大部分人觉得这个东西没有什么用。但是如果应用装的很多的时候,比如你装了几百个应用,你很难快速的在桌面上找到你想要的应用。这个时候Spotlight就体现出作用了。iOS9苹果提供了更强大的应用内搜索功能,以前只能搜索到你的app,从iOS9开始你可以搜索到你应用内的某一个功能,用户通过搜索点击可以直接进入应用内的某一功能模块。。。算了还是不墨迹了。。我这个文笔还是非常醉人的,下面开始介绍这个spotlight的简单使用

首先做了一些准备工作,创建项目拉等等,

如上图做了几个简单界面用来做后面的跳转~~~分别设置几个颜色用于区分是哪一个界面。不要问我为啥用这个几个颜色,,,因为我猜你们喜欢黄色。。。

firstView 为橙色view secondView为黄色view

接下来导入头文件 #import <CoreSpotlight/CoreSpotlight.h> 我是在appdelegate 里面导入的,并且在程序启动的时候初始化并设置搜索。

设置Spotlight的方法 *创建CSSearchableItemAttributeSet对象

CSSearchableItemAttributeSet *firstSet = [[CSSearchableItemAttributeSet alloc] initWithItemContentType:@"firstSet"];复制代码

//标题     firstSet.title = @"测试firstView";     //详细描述     firstSet.contentDescription = @"测试firstView哈哈哈哈哈哈哈";     //关键字,     NSArray *firstSeachKey = [NSArray arrayWithObjects:@"first",@"测试",@"firstView", nil];     firstSet.contactKeywords = firstSeachKey; 注:搜索界面显示的属性都是在这里设置的。展示内容,图片等等

*创建CSSearchableItem对象

CSSearchableItem *firstItem = [[CSSearchableItem alloc] initWithUniqueIdentifier:@"firstItem" domainIdentifier:@"first" attributeSet:firstSet];复制代码

注:每个set都要对应一个item。

*设置搜索

[[CSSearchableIndex defaultSearchableIndex] indexSearchableItems:itemArray completionHandler:^(NSError * _Nullable error) {复制代码

if (error) {             NSLog(@"设置失败%@",error);

}else{                      NSLog(@"设置成功");         }     }];

这个样子搜索就设置完了。通过你设置的关键字可以在Spotlight里搜索到你设置的内容,完整方法如下

- (void)setSpotlight{复制代码

/应用内搜索,想搜索到多少个界面就要创建多少个set ,每个set都要对应一个item/     CSSearchableItemAttributeSet *firstSet = [[CSSearchableItemAttributeSet alloc] initWithItemContentType:@"firstSet"];     //标题     firstSet.title = @"测试firstView";     //详细描述     firstSet.contentDescription = @"测试firstView哈哈哈哈哈哈哈";     //关键字,     NSArray *firstSeachKey = [NSArray arrayWithObjects:@"first",@"测试",@"firstView", nil];     firstSet.contactKeywords = firstSeachKey;          CSSearchableItemAttributeSet *secondSet = [[CSSearchableItemAttributeSet alloc] initWithItemContentType:@"secondSet"];     secondSet.title = @"测试SecondView";     secondSet.contentDescription = @"测试secondView哈哈哈哈哈哈哈哈";     NSArray *secondArrayKey = [NSArray arrayWithObjects:@"second",@"测试",@"secondeVIew", nil];     secondSet.contactKeywords = secondArrayKey;          //UniqueIdentifier每个搜索都有一个唯一标示,当用户点击搜索到得某个内容的时候,系统会调用代理方法,会将这个唯一标示传给你,以便让你确定是点击了哪一,方便做页面跳转     //domainIdentifier搜索域标识,删除条目的时候调用的delegate会传过来这个值     CSSearchableItem *firstItem = [[CSSearchableItem alloc] initWithUniqueIdentifier:@"firstItem" domainIdentifier:@"first" attributeSet:firstSet];          CSSearchableItem *secondItem = [[CSSearchableItem alloc] initWithUniqueIdentifier:@"secondItem" domainIdentifier:@"second" attributeSet:secondSet];          NSArray *itemArray = [NSArray arrayWithObjects:firstItem,secondItem, nil];          [[CSSearchableIndex defaultSearchableIndex] indexSearchableItems:itemArray completionHandler:^(NSError * _Nullable error) {         if (error) {             NSLog(@"设置失败%@",error);

}else{                      NSLog(@"设置成功");         }     }];      }

之后在 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 方法中调用

NSLog(@"%f",[UIDevice currentDevice].systemVersion.floatValue);复制代码

if ([UIDevice currentDevice].systemVersion.floatValue >= 9.0) {                 [self setSpotlight];     }      现在设置搜索就设置完了。但是现在点击之后还是只能进入应用不能进入指定的界面。还需要实现下面的代理,在代理方法里面做一些操作

- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray * _Nullable))restorationHandler{复制代码

NSString *idetifier  = userActivity.userInfo[@"kCSSearchableItemActivityIdentifier"];     NSLog(@"%@",idetifier);          UINavigationController *nav = (UINavigationController *)self.window.rootViewController;     UIStoryboard *stroy = [UIStoryboard storyboardWithName:@"Main" bundle:nil];          if ([idetifier isEqualToString:@"firstItem"]) {                  FirstViewController *fistVc = [stroy instantiateViewControllerWithIdentifier:@"firstView"];         [nav pushViewController:fistVc animated:YES];              }else if ([idetifier isEqualToString:@"secondItem"]){                  SecondViewController *secondVc = [stroy instantiateViewControllerWithIdentifier:@"secondView"];         [nav pushViewController:secondVc animated:YES];     }          return YES; }

OK,全部完成~~~~系统还给提供了几个删除item的方法

- (void)deleteSearchableItemsWithIdentifiers:(NSArray
*)identifiers completionHandler:(void (^ __nullable)(NSError * __nullable error))completionHandler{}- (void)deleteSearchableItemsWithDomainIdentifiers:(NSArray
*)domainIdentifiers completionHandler:(void (^ __nullable)(NSError * __nullable error))completionHandler{}- (void)deleteAllSearchableItemsWithCompletionHandler:(void (^ __nullable)(NSError * __nullable error))completionHandler{}复制代码

转载地址:http://wmiyl.baihongyu.com/

你可能感兴趣的文章
centos7 开启防火墙端口 firewalld
查看>>
day25 Python
查看>>
linux影响上传文件大小的因素
查看>>
密码爆破脚本
查看>>
bzoj4788: [CERC2016]Bipartite Blanket
查看>>
Html5的一些基础知识
查看>>
java 创建线程
查看>>
Python全栈开发day3
查看>>
关于onSaveInstanceState的javadoc的渣渣翻译
查看>>
菜鸡的2017CPPC网络赛
查看>>
ADO.NET中的5个对象
查看>>
php的数据访问和封装运用
查看>>
C3----几个常用的加载图标制作
查看>>
python_面向对象小试题
查看>>
Windows、Linux系统安装JDK配置Java环境变量
查看>>
JSON工具类
查看>>
win7家庭版升级旗舰版
查看>>
简单的字符串字典工具类 - DictProp
查看>>
eclipse打包
查看>>
MVC,EF 小小封装
查看>>