還是直插正題,有錯誤請指出。
Spotlight這個功能很早就有了,可能大部分人覺得這個東西沒有什麼用。但是如果應用裝的很多的時候,比如你裝了幾百個應用,你很難快速的在桌面上找到你想要的應用。這個時候Spotlight就體現出作用了。iOS9蘋果提供了更強大的應用內搜尋功能,以前只能搜尋到你的app,從iOS9開始你可以搜尋到你應用內的某一個功能,使用者通過搜尋點選可以直接進入應用內的某一功能模組。。。算了還是不墨跡了。。我這個文筆還是非常醉人的,下面開始介紹這個spotlight的簡單使用
首先做了一些準備工作,建立專案拉等等,
如上圖做了幾個簡單介面用來做後面的跳轉~~~分別設定幾個顏色用於區分是哪一個介面。不要問我為啥用這個幾個顏色,,,因為我猜你們喜歡黃色。。。
firstView 為橙色view secondView為黃色view
接下來匯入標頭檔案 #import <CoreSpotlight/CoreSpotlight.h> 我是在appdelegate 裡面匯入的,並且在程式啟動的時候初始化並設定搜尋。
設定Spotlight的方法 *建立CSSearchableItemAttributeSet物件
CSSearchableItemAttributeSet *firstSet = [[CSSearchableItemAttributeSet alloc] initWithItemContentType:@"firstSet"];
複製程式碼
//標題 firstSet.title = @"測試firstView"; //詳細描述 firstSet.contentDescription = @"測試firstView哈哈哈哈哈哈哈"; //關鍵字, NSArray *firstSeachKey = [NSArray arrayWithObjects:@"first",@"測試",@"firstView", nil]; firstSet.contactKeywords = firstSeachKey; 注:搜尋介面顯示的屬性都是在這裡設定的。展示內容,圖片等等
*建立CSSearchableItem物件
CSSearchableItem *firstItem = [[CSSearchableItem alloc] initWithUniqueIdentifier:@"firstItem" domainIdentifier:@"first" attributeSet:firstSet];
複製程式碼
注:每個set都要對應一個item。
*設定搜尋
[[CSSearchableIndex defaultSearchableIndex] indexSearchableItems:itemArray completionHandler:^(NSError * _Nullable error) {
複製程式碼
if (error) { NSLog(@"設定失敗%@",error);
}else{ NSLog(@"設定成功"); } }];
這個樣子搜尋就設定完了。通過你設定的關鍵字可以在Spotlight裡搜尋到你設定的內容,完整方法如下
- (void)setSpotlight{
複製程式碼
/應用內搜尋,想搜尋到多少個介面就要建立多少個set ,每個set都要對應一個item/ CSSearchableItemAttributeSet *firstSet = [[CSSearchableItemAttributeSet alloc] initWithItemContentType:@"firstSet"]; //標題 firstSet.title = @"測試firstView"; //詳細描述 firstSet.contentDescription = @"測試firstView哈哈哈哈哈哈哈"; //關鍵字, NSArray *firstSeachKey = [NSArray arrayWithObjects:@"first",@"測試",@"firstView", nil]; firstSet.contactKeywords = firstSeachKey; CSSearchableItemAttributeSet *secondSet = [[CSSearchableItemAttributeSet alloc] initWithItemContentType:@"secondSet"]; secondSet.title = @"測試SecondView"; secondSet.contentDescription = @"測試secondView哈哈哈哈哈哈哈哈"; NSArray *secondArrayKey = [NSArray arrayWithObjects:@"second",@"測試",@"secondeVIew", nil]; secondSet.contactKeywords = secondArrayKey; //UniqueIdentifier每個搜尋都有一個唯一標示,當使用者點選搜尋到得某個內容的時候,系統會呼叫代理方法,會將這個唯一標示傳給你,以便讓你確定是點選了哪一,方便做頁面跳轉 //domainIdentifier搜尋域標識,刪除條目的時候呼叫的delegate會傳過來這個值 CSSearchableItem *firstItem = [[CSSearchableItem alloc] initWithUniqueIdentifier:@"firstItem" domainIdentifier:@"first" attributeSet:firstSet]; CSSearchableItem *secondItem = [[CSSearchableItem alloc] initWithUniqueIdentifier:@"secondItem" domainIdentifier:@"second" attributeSet:secondSet]; NSArray *itemArray = [NSArray arrayWithObjects:firstItem,secondItem, nil]; [[CSSearchableIndex defaultSearchableIndex] indexSearchableItems:itemArray completionHandler:^(NSError * _Nullable error) { if (error) { NSLog(@"設定失敗%@",error);
}else{ NSLog(@"設定成功"); } }]; }
之後在 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 方法中呼叫
NSLog(@"%f",[UIDevice currentDevice].systemVersion.floatValue);
複製程式碼
if ([UIDevice currentDevice].systemVersion.floatValue >= 9.0) { [self setSpotlight]; } 現在設定搜尋就設定完了。但是現在點選之後還是隻能進入應用不能進入指定的介面。還需要實現下面的代理,在代理方法裡面做一些操作
- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray * _Nullable))restorationHandler{
複製程式碼
NSString *idetifier = userActivity.userInfo[@"kCSSearchableItemActivityIdentifier"]; NSLog(@"%@",idetifier); UINavigationController *nav = (UINavigationController *)self.window.rootViewController; UIStoryboard *stroy = [UIStoryboard storyboardWithName:@"Main" bundle:nil]; if ([idetifier isEqualToString:@"firstItem"]) { FirstViewController *fistVc = [stroy instantiateViewControllerWithIdentifier:@"firstView"]; [nav pushViewController:fistVc animated:YES]; }else if ([idetifier isEqualToString:@"secondItem"]){ SecondViewController *secondVc = [stroy instantiateViewControllerWithIdentifier:@"secondView"]; [nav pushViewController:secondVc animated:YES]; } return YES; }
OK,全部完成~~~~系統還給提供了幾個刪除item的方法
- (void)deleteSearchableItemsWithIdentifiers:(NSArray<NSString *> *)identifiers completionHandler:(void (^ __nullable)(NSError * __nullable error))completionHandler{
}
- (void)deleteSearchableItemsWithDomainIdentifiers:(NSArray<NSString *> *)domainIdentifiers completionHandler:(void (^ __nullable)(NSError * __nullable error))completionHandler{
}
- (void)deleteAllSearchableItemsWithCompletionHandler:(void (^ __nullable)(NSError * __nullable error))completionHandler{
}
複製程式碼