iOS 用NSPredicate實現搜索 篩選

關于搜索一般使用UISearchbar + UISearchDisplayController 實現, UISearchController畢竟iOS8才出來的. 簡單搜索建議使用. 如果需求比較苛刻的話 ,還是用textfild 更容易自定義.

屏幕快照 2016-06-30 13.46.46.png

直接上代碼...

-(void)filterContentForSearchText:(NSString*)searchText{
    
//我這里把沒有 文本時讀取數據庫 的情形都寫在一起了
    if (searchText.length == 0 && [[TCRecondBase selectHistroySearchGames] count] > 0) {
        self.type = HistroyType;
        self.datasArry = [TCRecondBase selectHistroySearchGames];
        
    }else{
        self.type = SearchResultType;
    }
    //檢測輸入的是不是拼音
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",@"^[A-Za-z]*$"];
    NSMutableArray* resultArry = [NSMutableArray array];
//是拼音則匹配以輸入的拼音開頭的且不區分大小寫的游戲名
    if ([predicate evaluateWithObject:searchText]) {
        
        NSPredicate *predict = [NSPredicate predicateWithFormat:@"SELF BEGINSWITH[cd] %@",searchText];
        NSArray* spallArry = [_allSpalls filteredArrayUsingPredicate:predict];
        for (NSString* str in spallArry) {
            
            NSInteger index = [_allSpalls indexOfObject:str];
            
            [resultArry addObject:[_allNames objectAtIndex:index]];
        }
//輸入的是數字或者漢字 則匹配名字中包含輸入字符的游戲名
    }else{ 
        NSPredicate *predict = [NSPredicate predicateWithFormat:@"SELF CONTAINS %@",searchText];
//或者使用 @"name LIKE[cd] '*%@*'"    //*代表通配符
        resultArry = [_allNames filteredArrayUsingPredicate:predict].mutableCopy;
    }
    self.searchResultArry = resultArry;
    [self.histroyTableView reloadData];
}
//NSPredicate功能很強大,更多謂詞匹配語法自行百度NSPredicate的使用
屏幕快照 2016-06-30 13.47.56.png
屏幕快照 2016-06-30 13.48.29.png
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 發現 關注 消息 iOS 第三方庫、插件、知名博客總結 作者大灰狼的小綿羊哥哥關注 2017.06.26 09:4...
    肇東周閱讀 12,245評論 4 61
  • 總有起風的清晨,總有暖和的午后,總有絢爛的黃昏,總有流星的夜晚,所以不如保持順其自然的心境,把握每一個瞬間,試著去...
    拾光縮寫閱讀 333評論 0 0
  • 看演唱會時,每個座位上都有一個紙質的ROCK手套,每個手套上都有一句歌詞。 我拿到的那句是:愛情不過是生活的屁。 ...
    用余生追趕時光閱讀 2,790評論 1 1