iOS spotlight与进入程序的几种方法

spotlight是iOS 9新推出的功能,允许用户在系统中根据他们的设置搜索所有与关键词有关的东西。它的使用比较简单,下面说说它的使用和遇到的那些坑。

spotlight效果展示
在使用时需要引入框架并导入头问价

 <CoreSpotlight/CoreSpotlight.h>
 <MobileCoreServices/MobileCoreServices.h>

(1)创建spotlight,主要分为三步

  • 1)为每一个数据设置数据(CSSearchableItemAttributeSet)
  • 2)实例化一个可搜索对象(CSSearchableItem)。
  • 3)将所有对象放入到一个数组中。

      NSMutableArray *searchItems = [NSMutableArray array];
    
      CSSearchableItemAttributeSet *attributeSet = [[CSSearchableItemAttributeSet alloc]initWithItemContentType:(NSString *)kUTTypeImage];
    
      // 标题
      attributeSet.title = actionGroup.name;
      //关键字
      attributeSet.keywords = @[@"大招",@"运动"];
      // 描述
      attributeSet.contentDescription = actionGroup.notes;
      // 图标, NSData格式
      attributeSet.thumbnailData = [NSData dataWithContentsOfURL:[NSURL URLWithString:actionGroup.actionGroupImage.actionGroupImg]];
    
      CSSearchableItem *item = [[CSSearchableItem alloc] initWithUniqueIdentifier:@"actionGroud"  domainIdentifier:@"dongci" attributeSet:attributeSet];
    
      [searchItems addObject:item];
    
      [[CSSearchableIndex defaultSearchableIndex] indexSearchableItems:searchItems completionHandler:^(NSError * error) {
    
      }];
    

(2)删除,三种删除方法
- 根据Identifiers删除

- (void)deleteSearchableItemsWithIdentifiers:(NSArray<NSString *> *)identifiers completionHandler:(void (^ __nullable)(NSError * __nullable error))completionHandler
  • 根据domainIdentifiers删除

    - (void)deleteSearchableItemsWithDomainIdentifiers:(NSArray<NSString *> *)domainIdentifiers completionHandler:(void (^ __nullable)(NSError * __nullable error))completionHandler
    
  • 删除全部

    - (void)deleteAllSearchableItemsWithCompletionHandler:(void (^ __nullable)(NSError * __nullable error))completionHandler
    

(3)通过spotlight唤起应用程序需要在Appdelegate中调用相应的方法。

- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray * _Nullable))restorationHandler

可以通过userActivity.userInfo[@"kCSSearchableItemActivityIdentifier"]判断点击内容。

至此,启动一个应用不再只是点击应用进入,那我们来看看启动应用的其他几种方法。

  • 1)推送通知(notification)

通过点击推送通知内容进入程序

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult result))completionHandler
  • 2)3D Touch

3D Touch是6s/6s plus以及以后苹果设备特有的功能,设置shortcutItem设置菜单,通过其进入相应内容

- (void)application:(UIApplication *)application performActionForShortcutItem:(UIApplicationShortcutItem *)shortcutItem completionHandler:(void (^)(BOOL))completionHandler

可以通过shortcutItem.type确定选择哪一条

  • 3)spotlight

  • 4)应用白名单,通过其他应用唤起,如使用分享时打开第三方分享应用。

(4)注意
在创建和删除spotlight时,系统会自动分配一个子线程,因此无需再次分配线程。若要显示相关的UI(如alert),需要performSelectorOnMainThread

谢谢查看,欢迎补充!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值