iOS9 支持应用内搜索,比如
点击进入可以直接进入详情界面。做到这点需要两步:一、建立索引 2、点击索引进入程序进行相应处理。
使用soptlight需要先导入静态库
然后在需要建立索引的地方加入下面代码
#import <CoreSpotlight/CoreSpotlight.h>
NSMutableArray *seachableItems = [NSMutableArray new];
//titles为索引的标题数组,可以分别定义详细内容和图片,图片为空时,默认logo图片
[titles enumerateObjectsUsingBlock:^(NSString *__nonnull obj, NSUInteger idx, BOOL * __nonnull stop) {
CSSearchableItemAttributeSet *attributeSet = [[CSSearchableItemAttributeSet alloc] initWithItemContentType:@"views"];
attributeSet.title = obj;
attributeSet.contentDescription = [NSString stringWithFormat:NSLocalizedString(@"快速打开 %@", nil),obj];
UIImage *thumbImage = [UIImage imageNamed:[NSString stringWithFormat:@"icon_%@.png",obj]];
attributeSet.thumbnailData = UIImagePNGRepresentation(thumbImage);//beta 1 there is a bug
CSSearchableItem *item = [[CSSearchableItem alloc] initWithUniqueIdentifier:obj
domainIdentifier:@"你的identifer" attributeSet:attributeSet];
[seachableItems addObject:item];
}];
[[CSSearchableIndex defaultSearchableIndex] indexSearchableItems:seachableItems
completionHandler:^(NSError * __nullable error) {
if (!error)
NSLog(@"%@",error.localizedDescription);
}];
- (BOOL)application:(nonnull UIApplication *)application continueUserActivity:(nonnull NSUserActivity *)userActivity restorationHandler:(nonnull void (^)(NSArray * __nullable))restorationHandler{
NSString *idetifier = userActivity.userInfo[@"kCSSearchableItemActivityIdentifier"];//这个是标题,通过标题可以知道点击了什么
NSArray *arr = [[NSUserDefaults standardUserDefaults]objectForKey:@"homeDataArr"];
for (NSDictionary *dict in arr){//遍历数组找到点击的标示进行处理,这个例子中根视图是tabbar,具体代码视情况而定
NSString *subject = dict[@"subject"];
if ([subject isEqualToString:idetifier]){
UITabBarController *tabbar = (UITabBarController *)self.window.rootViewController;
MPBaseNavViewController *nav = [[tabbar viewControllers] objectAtIndex:1];
UIStoryboard *story = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
MPHomeDetailViewController *editc = (MPHomeDetailViewController*)[story instantiateViewControllerWithIdentifier:@"MPHomeDetailVC"];
[nav pushViewController:editc animated:YES];
break;
}
}
return YES;
}
此外删除索引的代码
[[CSSearchableIndex defaultSearchableIndex]deleteSearchableItemsWithIdentifiers:@[idetifier] completionHandler:^(NSError * _Nullable error) {
}];