iOS實現(xiàn)SpotLight搜索 讓你的APP支持SpotLight搜索

隨著項目的開發(fā)冠跷,功能需求越來越多爹凹,有的沒什么卵用厨诸,有的倒是能提示不少逼格,這次接到的功能是實現(xiàn)iOS SpotLight搜索效果逛万。

這個功能很早就有,主要功能是在iOS9系統(tǒng)界面下拉會出現(xiàn)搜索功能界面批钠,在這里可以搜索關(guān)鍵信息宇植,來展示應(yīng)用內(nèi)的內(nèi)容,并且點擊信息打開應(yīng)用跳轉(zhuǎn)具體頁面等操作埋心。這個功能還是很有用的指郁,面對這越來越多的應(yīng)用霸占你手機(jī),給你的應(yīng)用加上這么一個搜搜功能拷呆,還是有點與眾不同闲坎,主要是提升逼格〔绺看看效果圖腰懂。

這里可以顯示應(yīng)用內(nèi)的一些信息,挺豐富的项秉,有圖片绣溜,標(biāo)題,副標(biāo)題娄蔼。


第一步:首先導(dǎo)入CoreSpotlight.framework框架
在需要實現(xiàn)的界面
#import <CoreSpotlight/CoreSpotlight.h>

比如你的應(yīng)用是一個新聞類的怖喻,有列表頁面,點擊能進(jìn)入新聞詳情頁面岁诉,你想在外面能搜索到新聞信息锚沸。

然后實現(xiàn)代碼

- (void)setupSpotlight  
{  
    if ([UIDevice currentDevice].systemVersion.floatValue < 9.0) {  
        return;  
    }  
      
    /*應(yīng)用內(nèi)搜索,想搜索到多少個界面就要創(chuàng)建多少個set 涕癣,每個set都要對應(yīng)一個item*/  
    CSSearchableItemAttributeSet *firstSet = [[CSSearchableItemAttributeSet alloc]initWithItemContentType:@"firstSet"];  
    //標(biāo)題  
    firstSet.title = @"測試firstView";  
    //詳細(xì)描述  
    firstSet.contentDescription = @"測試firstView哈哈哈哈哈哈哈";  
    //關(guān)鍵字  
    firstSet.contactKeywords = @[@"first",@"測試",@"firstView"];  
    //設(shè)置圖片  
    //這里的url也必須是本地文件路徑哗蜈,而不是網(wǎng)絡(luò)圖片url  
//    firstSet.thumbnailURL = [NSURL URLWithString:@"http://www.jf258.com/uploads/2014-09-11/195154600.jpg"];  
    //也可以用這個圖片加載方法  
    firstSet.thumbnailData = UIImagePNGRepresentation([UIImage imageNamed:@"耳機(jī)"]);  
    /* 
     這里有個小細(xì)節(jié): 
     設(shè)置的圖片展示的效果系統(tǒng)并不會給你處理,意思是說,如果你傳了一張長方形的圖片做封面icon恬叹,你在搜索列表上展示的icon就是長方形的候生,如果長寬比很大的話,很很難看绽昼,所以這里盡量保證圖片趨近去正方形唯鸭,使得展示效果好看點。 
     或者在自己裁剪處理下趨近正方形硅确。 
     */  
      
    CSSearchableItemAttributeSet *secondSet = [[CSSearchableItemAttributeSet alloc]initWithItemContentType:@"secondSet"];  
    secondSet.title = @"測試secondView";  
    secondSet.contentDescription = @"測試secondView哈哈哈哈哈哈哈";  
    secondSet.contactKeywords = @[@"second",@"測試",@"secondView"];  
    secondSet.thumbnailData = UIImagePNGRepresentation([UIImage imageNamed:@"耳機(jī)"]);  
      
    //UniqueIdentifier每個搜索都有一個唯一標(biāo)示目溉,當(dāng)用戶點擊搜索到得某個內(nèi)容的時候,系統(tǒng)會調(diào)用代理方法菱农,會將這個唯一標(biāo)示傳給你缭付,以便讓你確定是點擊了哪一,方便做頁面跳轉(zhuǎn)  
    //domainIdentifier搜索域標(biāo)識循未,刪除條目的時候調(diào)用的delegate會傳過來這個值  
    CSSearchableItem *firstItem = [[CSSearchableItem alloc] initWithUniqueIdentifier:@"firstItem" domainIdentifier:@"first" attributeSet:firstSet];  
      
    CSSearchableItem *secondItem = [[CSSearchableItem alloc] initWithUniqueIdentifier:@"secondItem" domainIdentifier:@"second" attributeSet:secondSet];  
      
    NSArray *items = @[firstItem,secondItem];  
      
    //把上面的設(shè)置item都添加進(jìn)入  
    [[CSSearchableIndex defaultSearchableIndex] indexSearchableItems:items completionHandler:^(NSError * _Nullable error) {  
        if (error) {  
            NSLog(@"失敗%@",error);  
        }  
        else {  
            NSLog(@"成功");  
        }  
    }];  
}  

接下來我自己項目代碼實現(xiàn)參考

#pragma mark - Spotlight
- (void)setupSpotlight
{
    NSString *eventLevel = [NSString stringWithFormat:@"賽事級別:%@",self.levels[self.eventDetail.eventLevel]];
    NSString *eventTime = [NSString stringWithFormat:@"賽事時間:%@-%@",[GlobalPublicMethods formatTime:self.eventDetail.eventStratTime format:@"yyyy/MM/dd"], [GlobalPublicMethods formatTime:self.eventDetail.eventEndTime format:@"yyyy/MM/dd"]];
    
    UIImage *spotlightImage = [[YYImageCache sharedCache] getImageForKey:[self.eventDetail.bannerImages firstObject]];
    spotlightImage = [spotlightImage compressImageSize:CGSizeMake(100, 100)];
    
    CSSearchableItemAttributeSet *attributeSet = [[CSSearchableItemAttributeSet alloc]initWithItemContentType:@"EventDetail"];
    attributeSet.title = self.eventDetail.title;
    attributeSet.contentDescription = [NSString stringWithFormat:@"%@\n%@",eventLevel,eventTime];
    attributeSet.thumbnailData = UIImageJPEGRepresentation(spotlightImage, 1.0);
    attributeSet.keywords = @[@"野途",@"wildto",@"賽事",@"級別",@"時間",self.eventDetail.title];
    
    CSSearchableItem *item = [[CSSearchableItem alloc]initWithUniqueIdentifier:self.eventID domainIdentifier:@"賽事詳情" attributeSet:attributeSet];
    
    NSArray *items = @[item];
    
    [[CSSearchableIndex defaultSearchableIndex] indexSearchableItems:items completionHandler:^(NSError * _Nullable error) {
        if (error) {
            DLog(@"失敗%@",error);
        }
        else {
            DLog(@"成功");
        }
    }];
}

做到這里陷猫,你就能夠在系統(tǒng)界面下拉搜索到這個app里面保存好的信息,如果實現(xiàn)點擊cell打開應(yīng)用進(jìn)入具體界面的操作的妖,還必須實現(xiàn)下面的代理方法

第二步:在Appdelegate實現(xiàn)

-(BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray * _Nullable))restorationHandler  
{  
    NSString *idetifier = userActivity.userInfo[CSSearchableItemActivityIdentifier];  
    NSLog(@"%@",idetifier);  
      
    UINavigationController *nav = (UINavigationController *)self.window.rootViewController;  
    if ([idetifier isEqualToString:@"firstItem"]) {  
        SpotlightViewController *firstVC = [[SpotlightViewController alloc]init];  
        [nav pushViewController:firstVC animated:YES];  
    }  
    else if ([idetifier isEqualToString:@"secondItem"]){  
        UIViewController *secondVC = [[UIViewController alloc]init];  
        secondVC.title = @"第二個";  
        secondVC.view.backgroundColor = [UIColor orangeColor];  
        [nav pushViewController:secondVC animated:YES];  
    }  
      
    return YES;  
}  

補(bǔ)充:SpotLight還提供了幾個刪除搜索索引的方法

- (void)deleteSearchableItemsWithIdentifiers:(NSArray<NSString *> *)identifiers completionHandler:(void (^ __nullable)(NSError * __nullable error))completionHandler{  
   //根據(jù)標(biāo)志來刪除指定的保存設(shè)置  
}  
  
- (void)deleteSearchableItemsWithDomainIdentifiers:(NSArray<NSString *> *)domainIdentifiers completionHandler:(void (^ __nullable)(NSError * __nullable error))completionHandler{  
     
}  
  
- (void)deleteAllSearchableItemsWithCompletionHandler:(void (^ __nullable)(NSError * __nullable error))completionHandler{  
//刪除所有的保存設(shè)置  
}  
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末绣檬,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子嫂粟,更是在濱河造成了極大的恐慌娇未,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,036評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件星虹,死亡現(xiàn)場離奇詭異零抬,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)宽涌,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,046評論 3 395
  • 文/潘曉璐 我一進(jìn)店門平夜,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人卸亮,你說我怎么就攤上這事褥芒。” “怎么了嫡良?”我有些...
    開封第一講書人閱讀 164,411評論 0 354
  • 文/不壞的土叔 我叫張陵锰扶,是天一觀的道長。 經(jīng)常有香客問我寝受,道長坷牛,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,622評論 1 293
  • 正文 為了忘掉前任很澄,我火速辦了婚禮京闰,結(jié)果婚禮上颜及,老公的妹妹穿的比我還像新娘。我一直安慰自己蹂楣,他們只是感情好俏站,可當(dāng)我...
    茶點故事閱讀 67,661評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著痊土,像睡著了一般肄扎。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上赁酝,一...
    開封第一講書人閱讀 51,521評論 1 304
  • 那天犯祠,我揣著相機(jī)與錄音,去河邊找鬼酌呆。 笑死衡载,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的隙袁。 我是一名探鬼主播痰娱,決...
    沈念sama閱讀 40,288評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼菩收!你這毒婦竟也來了梨睁?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,200評論 0 276
  • 序言:老撾萬榮一對情侶失蹤坛梁,失蹤者是張志新(化名)和其女友劉穎而姐,沒想到半個月后腊凶,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體划咐,經(jīng)...
    沈念sama閱讀 45,644評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,837評論 3 336
  • 正文 我和宋清朗相戀三年钧萍,在試婚紗的時候發(fā)現(xiàn)自己被綠了褐缠。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,953評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡风瘦,死狀恐怖队魏,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情万搔,我是刑警寧澤胡桨,帶...
    沈念sama閱讀 35,673評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站瞬雹,受9級特大地震影響昧谊,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜酗捌,卻給世界環(huán)境...
    茶點故事閱讀 41,281評論 3 329
  • 文/蒙蒙 一呢诬、第九天 我趴在偏房一處隱蔽的房頂上張望涌哲。 院中可真熱鬧,春花似錦尚镰、人聲如沸阀圾。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,889評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽初烘。三九已至,卻和暖如春敞曹,著一層夾襖步出監(jiān)牢的瞬間账月,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,011評論 1 269
  • 我被黑心中介騙來泰國打工澳迫, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留局齿,地道東北人。 一個月前我還...
    沈念sama閱讀 48,119評論 3 370
  • 正文 我出身青樓橄登,卻偏偏與公主長得像抓歼,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子拢锹,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,901評論 2 355

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,129評論 25 707
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫谣妻、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,103評論 4 62
  • 上一章 41 第二日卒稳,舒心帶著舒徵回了家鄉(xiāng)蹋半,這次之所以回來,一個重要的原因即是為了——舒子鈺充坑,她的姐姐减江,舒心本來叫...
    梧桐兮兮閱讀 500評論 0 0
  • 各位男神女神好也榄! 我們是吃不胖沙拉巡莹! 人生是一場對抗貪婪的旅行,拋掉貪婪甜紫,從一盤沙拉開始降宅。 我們創(chuàng)立這個品牌的的初...
    fujianben閱讀 372評論 0 0
  • 周星馳[1] (Stephen Chow),1962年6月22日生于香港囚霸,祖籍浙江寧波腰根,華語喜劇演員、導(dǎo)演邮辽、編劇唠雕、...
    叫我游資閱讀 360評論 0 1