您的位置:首页 > 移动开发 > IOS开发

iOS 9 Spotlight简单使用

2015-09-30 17:52 344 查看
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) {
}];
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  iOS9 spotlight