IOS实现SpotLight搜索 让你的APP支持SpotLight搜索
2016-04-22 15:32
519 查看
随着项目的开发,功能需求越来越多,有的没什么卵用,有的倒是能提示不少逼格,这次接到的功能是实现IOS SpotLight搜索效果。
这个功能很早就有,主要功能是在IOS9系统界面下拉会出现搜索功能界面,在这里可以搜索关键信息,来展示应用内的内容,并且点击信息打开应用跳转具体页面等操作。这个功能还是很有用的,面对这越来越多的应用霸占你手机,给你的应用加上这么一个搜搜功能,还是有点与众不同,主要是提升逼格。看看效果图。
这里可以显示应用内的一些信息,挺丰富的,有图片,标题,副标题。
第一步:首先导入CoreSpotlight.framework框架
在需要实现的界面
然后实现代码
做到这里,你就能够在系统界面下拉搜索到这个app里面保存好的信息,如果实现点击细心打开应用进入具体界面的操作,还必须实现下面的代理方法
第二步:在Appdelegate实现
SpotLight还提供了几个删除搜索索引的方法
这个功能很早就有,主要功能是在IOS9系统界面下拉会出现搜索功能界面,在这里可以搜索关键信息,来展示应用内的内容,并且点击信息打开应用跳转具体页面等操作。这个功能还是很有用的,面对这越来越多的应用霸占你手机,给你的应用加上这么一个搜搜功能,还是有点与众不同,主要是提升逼格。看看效果图。
这里可以显示应用内的一些信息,挺丰富的,有图片,标题,副标题。
第一步:首先导入CoreSpotlight.framework框架
在需要实现的界面
#import <CoreSpotlight/CoreSpotlight.h>比如你的应用是一个新闻类的,有列表页面,点击能进入新闻详情页面,你想在外面能搜索到新闻信息。
然后实现代码
- (void)setupSpotlight { if ([UIDevice currentDevice].systemVersion.floatValue < 9.0) { return; } /*应用内搜索,想搜索到多少个界面就要创建多少个set ,每个set都要对应一个item*/ CSSearchableItemAttributeSet *firstSet = [[CSSearchableItemAttributeSet alloc]initWithItemContentType:@"firstSet"]; //标题 firstSet.title = @"测试firstView"; //详细描述 firstSet.contentDescription = @"测试firstView哈哈哈哈哈哈哈"; //关键字 firstSet.contactKeywords = @[@"first",@"测试",@"firstView"]; //设置图片 //这里的url也必须是本地文件路径,而不是网络图片url // firstSet.thumbnailURL = [NSURL URLWithString:@"http://www.jf258.com/uploads/2014-09-11/195154600.jpg"]; //也可以用这个图片加载方法 firstSet.thumbnailData = UIImagePNGRepresentation([UIImage imageNamed:@"耳机"]); /* 这里有个小细节: 设置的图片展示的效果系统并不会给你处理,意思是说,如果你传了一张长方形的图片做封面icon,你在搜索列表上展示的icon就是长方形的,如果长宽比很大的话,很很难看,所以这里尽量保证图片趋近去正方形,使得展示效果好看点。 或者在自己裁剪处理下趋近正方形。 */ CSSearchableItemAttributeSet *secondSet = [[CSSearchableItemAttributeSet alloc]initWithItemContentType:@"secondSet"]; secondSet.title = @"测试secondView"; secondSet.contentDescription = @"测试secondView哈哈哈哈哈哈哈"; secondSet.contactKeywords = @[@"second",@"测试",@"secondView"]; secondSet.thumbnailData = UIImagePNGRepresentation([UIImage imageNamed:@"耳机"]); //UniqueIdentifier每个搜索都有一个唯一标示,当用户点击搜索到得某个内容的时候,系统会调用代理方法,会将这个唯一标示传给你,以便让你确定是点击了哪一,方便做页面跳转 //domainIdentifier搜索域标识,删除条目的时候调用的delegate会传过来这个值 CSSearchableItem *firstItem = [[CSSearchableItem alloc] initWithUniqueIdentifier:@"firstItem" domainIdentifier:@"first" attributeSet:firstSet]; CSSearchableItem *secondItem = [[CSSearchableItem alloc] initWithUniqueIdentifier:@"secondItem" domainIdentifier:@"second" attributeSet:secondSet]; NSArray *items = @[firstItem,secondItem]; //把上面的设置item都添加进入 [[CSSearchableIndex defaultSearchableIndex] indexSearchableItems:items completionHandler:^(NSError * _Nullable error) { if (error) { NSLog(@"失败%@",error); } else { NSLog(@"成功"); } }]; }
做到这里,你就能够在系统界面下拉搜索到这个app里面保存好的信息,如果实现点击细心打开应用进入具体界面的操作,还必须实现下面的代理方法
第二步:在Appdelegate实现
-(BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray * _Nullable))restorationHandler { NSString *idetifier = userActivity.userInfo[CSSearchableItemActivityIdentifier]; NSLog(@"%@",idetifier); UINavigationController *nav = (UINavigationController *)self.window.rootViewController; if ([idetifier isEqualToString:@"firstItem"]) { SpotlightViewController *firstVC = [[SpotlightViewController alloc]init]; [nav pushViewController:firstVC animated:YES]; } else if ([idetifier isEqualToString:@"secondItem"]){ UIViewController *secondVC = [[UIViewController alloc]init]; secondVC.title = @"第二个"; secondVC.view.backgroundColor = [UIColor orangeColor]; [nav pushViewController:secondVC animated:YES]; } return YES; }
SpotLight还提供了几个删除搜索索引的方法
- (void)deleteSearchableItemsWithIdentifiers:(NSArray<NSString *> *)identifiers completionHandler:(void (^ __nullable)(NSError * __nullable error))completionHandler{ //根据标志来删除指定的保存设置 } - (void)deleteSearchableItemsWithDomainIdentifiers:(NSArray<NSString *> *)domainIdentifiers completionHandler:(void (^ __nullable)(NSError * __nullable error))completionHandler{ } - (void)deleteAllSearchableItemsWithCompletionHandler:(void (^ __nullable)(NSError * __nullable error))completionHandler{ //删除所有的保存设置 }
相关文章推荐
- angular apply
- 深入剖析Android系统中Service和IntentService的区别
- cocos2dx——scheduleOnce中回调delay函数添加参数
- Android ActionBar完全解析,使用官方推荐的最佳导航栏(上)
- Android AnimationSet详解
- Android自定义属性为应用程序设置全局背景
- Android自动化测试MonkeyRunner(二)------第一个示例
- Android Design Support Library使用详解
- android19以上和以下uri转路径的方法
- 将FBX文件导入Unity3d中
- Android中优秀控件学习
- 使用Xcode和Instruments调试解决iOS内存泄露
- JS判断PC端或移动端跳转至相应页面
- 多个域名使用微信获取用户信息的解决办法
- Android复习笔记1
- 使用Intent传递对象--Android学习笔记4
- iOS上架之启动页、图标设置
- iOS SVN
- 【转】android 常用theme
- Android手机号注册、绑定手机号获取短信验证码实例