美文网首页
iOS模糊搜索(支持拼音检索 首字母 等)

iOS模糊搜索(支持拼音检索 首字母 等)

作者: dalu | 来源:发表于2021-11-26 18:42 被阅读0次

    1.实现原理是:将源数据转化为拼音、首字母等临时字符串,将搜索内容与这个临时字符串比对进行搜索。

    比如:源数据“艾美”,会转化为临时字符串“#aimei,ai#mei,#am,#艾美”。
    
    拼音转化方法实现:
    -(NSString*)transformToPinyin:(NSString *)aString{ 
    
      //转成了可变字符串
      NSMutableString *str = [NSMutableString stringWithString:aString];
      CFStringTransform((CFMutableStringRef)str,NULL,       kCFStringTransformMandarinLatin,NO);
    
       //再转换为不带声调的拼音
       CFStringTransform((CFMutableStringRef)str,NULL, kCFStringTransformStripDiacritics,NO);
       NSArray *pinyinArray = [str componentsSeparatedByString:@" "];
       NSMutableString *allString = [NSMutableString new];
    
       int count = 0;
       for (int  i = 0; i < pinyinArray.count; i++){
          for(int i = 0; i < pinyinArray.count;i++){
               if (i == count) {
                   [allString appendString:@"#"];
                   //区分第几个字母
               }
               [allString appendFormat:@"%@",pinyinArray[i]];
           }
           [allString appendString:@","];
           count ++;
       }
        NSMutableString *initialStr = [NSMutableString new];
       //拼音首字母
       for (NSString *s in pinyinArray){
           if (s.length > 0){
               [initialStr appendString:  [s substringToIndex:1]];
           }
       }
       [allString appendFormat:@"#%@",initialStr];
       [allString appendFormat:@",#%@",aString];
       return allString;}
    

    2.输入关键字进行搜索:
    注意:为避免搜索过程中卡顿,一定要在子线程中调用哈

    -(void)searchRealText:(NSString *)text{
        [self.resultList removeAllObjects];
    
        dispatch_queue_t searchQueue = dispatch_queue_create("searchs.movie.device", DISPATCH_QUEUE_SERIAL);
        dispatch_async(searchQueue, ^{
            for (KGMInputModel* model in self.inputList) {
                NSString* pinyin = [NSString transformToPinyin:model.v_device_input_name];
                if ([pinyin rangeOfString:text options:NSCaseInsensitiveSearch].length>0) {
                    [self.resultList addObject:model];
                 }
            }
            dispatch_async(dispatch_get_main_queue(), ^{
                //刷新界面
            });
        });
    }
    

    3.实时搜索:节流,我这里用的是RAC

      @weakify(self);
      [[[self.textField.rac_textSignal distinctUntilChanged] throttle:0.5]   subscribeNext:^(NSString * _Nullable text) {
    @strongify(self);
     if (self.searchTextReturn) {
          self.searchTextReturn(text);
      }}];
    

    4.拖拽滑动收键盘

     self.tableView.keyboardDismissMode = UIScrollViewKeyboardDismissModeOnDrag;
    

    相关文章

      网友评论

          本文标题:iOS模糊搜索(支持拼音检索 首字母 等)

          本文链接:https://www.haomeiwen.com/subject/ovjxxrtx.html