iOS 9 Spotlight简单使用

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) {
 }];



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值