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

释放双眼,带上耳机,听听看~!

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


在使用时需要引入框架并导入头问价

 <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

谢谢查看,欢迎补充!

 

人已赞赏
iOS文章

CocoaPods--常见错误

2020-5-18 7:48:01

iOS文章

IOS根据两个经纬度计算相距距离

2020-5-18 9:03:02

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索