在iOS9中,苹果为开发者提供了搜索应用内内容的功能,通过阅读官方文档,来实现如下简单效果
本文章Demo:https://github.com/MenghanInChina/spotlightSearchDemo
先引入头文件
@import CoreSpotlight;
需要添加索引的界面执行以下代码
- (void)saveSpotlightInfo{
NSMutableArray<CSSearchableItem *> *searchableItems = [NSMutableArray array];
for (NSString *str in self.testArr) {
CSSearchableItemAttributeSet *attributedSet = [[CSSearchableItemAttributeSet alloc] initWithItemContentType:@"image"];
//在spotlight显示的名称
attributedSet.title = str;
//使用displayName, title就会无效
// attributedSet.displayName = [str stringByAppendingString:@"test"];
//展示介绍
attributedSet.contentDescription = @"我是测试临时工";
//此方法只可以使用本地路径
// attributedSet.thumbnailURL;
attributedSet.thumbnailData = UIImageJPEGRepresentation([UIImage imageNamed:@"x-man.jpg"], 0.5);
//添加用来检索的关键字
// attributedSet.keywords = @[@"1",@"2"];
//拨打电话功能
//需要将此属性赋值为1才可以生效
attributedSet.supportsPhoneCall = @1;
//设置电话号码
attributedSet.phoneNumbers = @[@"123"];
//定位地点集成
attributedSet.supportsNavigation = @1;
//集成地点需要设置经纬度
attributedSet.latitude = @2;
attributedSet.longitude = @3;
/**
Identifier代表通过spotlight点击进入应用时携带的userinfo
*/
CSSearchableItem *item = [[CSSearchableItem alloc] initWithUniqueIdentifier:str domainIdentifier:@"image" attributeSet:attributedSet];
[searchableItems addObject:item];
}
[[CSSearchableIndex defaultSearchableIndex] indexSearchableItems:searchableItems completionHandler:^(NSError * _Nullable error) {
if (error != nil) {
NSLog(@"%@",error.localizedDescription);
}
}];
}
在appDelegate中添加回调方法可再采取对应的操作
- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray * _Nullable))restorationHandler{
NSLog(@"---spotlight---:%@", userActivity.userInfo[@"kCSSearchableItemActivityIdentifier"]);
return YES;
}