iOS9 Search API NSUserActivity
Comment在WWDC2015会议上,苹果公布了iOS9系统,iOS9系统相比iOS7、iOS8并没有特别大得变化,可以看做是iOS8的基础上进行的平滑的过度。但是新的系统中仍有一些特性和功能值得人们去关注,其中
Search API就是其中之一。通过新的Search API可以实现强大的应用内搜索功能,通过在Spotlight中使用我们设计的所以,来查看app中的界面或是内容。
iOS9的 Search API由三个组件组成:
1.NSUserActivity
2.Web Markup
3.Core Spotlight
现在介绍一下NSUserActivity的使用
NSUserActivity是在iOS8中出现的API,主要用户HandOff功能,iOS9中NSUserActivity新增加了一个属性 eligibleForSearch 来控制在Spotlight中的显示
定义一个NSUserActivity属性1
@property (nonatomic, strong)NSUserActivity *activity;
初始化NSUserActivity,并设置属性1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17//ActivityType为唯一标识
_activity = [[NSUserActivity alloc]initWithActivityType:@"Eden"];
//title app在Spotlight中显示的名称,可以和app名称不一样,多个app使用相同的keywords,初始通过title名称进行排序
_activity.title = @"Eden";
//Spolight搜索关键字
_activity.keywords = [NSSet setWithArray:@[@"Adam", @"Lilith", @"Eve"]];
//关闭HandOff功能
_activity.eligibleForHandoff = NO;
//开启Spotlight search功能
_activity.eligibleForSearch = YES;
//开启NSUserActivity
[_activity becomeCurrent];
当做完这些操作时候然后运行程序,我们在spotlight中搜索 adam, lilith, eva中的某一个关键字就会找到我们的应用,此时选择应用会直接跳转到app的首页。有时候我们希望最好能通过某个关键字直接跳转到app其中某一页,幸运的是NSUserActivity同样支持这个功能。
准备工作:
创建AdmaViewController,LilithViewController
我们在AdmaViewController中创建adamUserActivity,title为adamView, 关键字adam
我们在LilithViewController中创建lilithUserActivity, title为lilithView,关键字lilith
可以在首页通过adam跳转到admaViewController
可以在首页通过lilith跳转到lilithViewController
开始工作:
找到AppDelegate文件,添加方法
//在主线程下存在可用NSUserActivity对象时候调用1
2
3
4
5
6
7
8
9- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray * _Nullable))restorationHandler{
//找到当前的window的rootView转换为UINavigationController(如果你的rootView是UINavigationController的话)
UINavigationController *navigationController = (UINavigationController *)self.window.rootViewController;
//找到navigationController的topView(首页) 中restoreUserActivityState方法
[navigationController.topViewController restoreUserActivityState:userActivity];
return YES;
}
在首页中重写restoreUserActivityState方法
1 | - (void)restoreUserActivityState:(NSUserActivity *)activity{ |
现在当选择再Spotlight中搜索adam,选择应用会直接跳转到 adamViewController中,搜索lilith关键字,选择应用会直接跳转到lilithViewController中