iOS 模糊搜索

作者: Mr_Atom | 来源:发表于2020-05-22 11:52 被阅读0次

需求是搜索城市,跟饿了么的城市搜索相仿.

大体思路就是先判断TextField输入的字符是拼音还是汉字.然后分别用NSPredicate进行搜索.

先把获取到的城市列表对象处理一下,给他们多增加一个拼音的属性.然后根据cityName转化.


@interface ZKAreaModel : NSObject

PROP_STR province;

PROP_STR city;

PROP_STR cityPinyin;

PROP_STR district;

// 快速生成area

+ (ZKAreaModel*)generateAreaWithPro:(NSString*)procity:(NSString*)citydis:(NSString*)district;

- (NSString *)cityToPinyin;

@end


@implementation ZKAreaModel

+ (ZKAreaModel*)generateAreaWithPro:(NSString*)procity:(NSString*)citydis:(NSString*)district {

    ZKAreaModel *model = [[ZKAreaModel alloc] init];

    model.province= pro;

    model.city= city;

    model.district= district;

    returnmodel;

}

- (NSString *)cityToPinyin {

    return [self.city transfromToPinyin];

}

@end


- (NSString *)transfromToPinyin {

    //转成了可变字符串

    NSMutableString *str = [NSMutableString stringWithString:self];

    CFStringTransform((CFMutableStringRef)str,NULL, kCFStringTransformMandarinLatin,NO);

    //再转换为不带声调的拼音

    CFStringTransform((CFMutableStringRef)str,NULL, kCFStringTransformStripDiacritics,NO);

    NSString *pinYinStr = [str stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];

    pinYinStr = [pinYinStrstringByReplacingOccurrencesOfString:@"\r" withString:@""];

    pinYinStr = [pinYinStrstringByReplacingOccurrencesOfString:@"\n" withString:@""];

    pinYinStr = [pinYinStrstringByReplacingOccurrencesOfString:@" " withString:@""];

    pinYinStr = [pinYinStrlowercaseString];

    returnpinYinStr;

}

由于我这个对象很多地方都用到,没有必要全部都转成拼音.所以用方法替代了.下面是TextFiled中输入字符时,用NSPredicate过滤的方法


- (void)textFieldDidChange {

NSPredicate*predicate;

    NSLog(@"是否是字母:%d",[sender.textstringWithFullLetter]);

    if([sender.stringWithFullChineseCharacters]) {

        // 输入的全部都是汉字

        NSLog(@"开始汉字搜索");

        predicate = [NSPredicatepredicateWithFormat:@"city CONTAINS %@", sender.text];

    }else{

        NSLog(@"开始拼音搜索");

        NSString*pinyin = [sender.texttransfromToPinyin];

        predicate = [NSPredicatepredicateWithFormat:@"cityPinyin CONTAINS %@", pinyin];

    }

    NSMutableArray *resultArray = [NSMutableArray arrayWithArray:[self.citiesList filteredArrayUsingPredicate:predicate]];

}

用正则写了一个判断字符串是否都为字母


- (BOOL)stringWithFullChineseCharacters {
    NSString *match = @"(^[\u4e00-\u9fa5]+$)";
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF matches %@", match];
    return [predicate evaluateWithObject:self];
}

但是这个方法只是粗略搜索,并不能处理多音字拼音.这个我后续会想办法优化一下.

相关文章

  • iOS 模糊搜索

    [NSPredicate predicateWithFormat: @"shiche_nickname CONTA...

  • iOS 模糊搜索

    简单介绍:根据拼音汉字或字母匹配到结果并高亮显示。下面是效果展示: 将数据源里的字符串转化为字符串+字符串对应的...

  • iOS 模糊搜索

    需求是搜索城市,跟饿了么的城市搜索相仿. 大体思路就是先判断TextField输入的字符是拼音还是汉字.然后分别用...

  • iOS - 模糊搜索 2

    前言:简单版可查看 模糊搜索 1 博客 一、申明相关属性和代理 **二、创建导航栏视图 ,MSUHomeNavVi...

  • iOS --- searchBar模糊搜索

    模糊搜索的实现思路:当搜索框开始编辑时对搜索框中的文本与后台给的资源相对比,包含搜索文本的展示在tableview...

  • iOS中的模糊搜索

    项目中经常要做一个模糊搜索(并非使用数据库的)的小功能,于是自己查资料做了一个Demo,感觉挺麻烦的. 一.大致步...

  • 模糊搜索

    【法1】Android基础控件—SearchView 【参考链接】 http://blog.csdn.net/za...

  • 模糊搜索

    http://blog.csdn.net/lianbaixue/article/details/10579117

  • IOS-模糊搜索UISearchBar+UISearchDisp

  • 八、模糊搜索

    jsp代码: servlet代码:

网友评论

    本文标题:iOS 模糊搜索

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