zoukankan      html  css  js  c++  java
  • IOS-模糊搜索(支持中文,拼音,字母)

    IOS - 模糊搜索

    这里模糊搜索 不是在数据中的,而是在数组,或者你需要的地方

    首先先看一下效果:

    所搜之前:

           

    搜索之后:

       

    下面思路讲解:

    1.定义好需要加载数据的数组

    这里需定义一个模型,加载数组中的内容,在模型中在加入两个变量,一个是拼音,一个是拼音的首字母

    2. 在数组加载到模型中的时候,将数组中的一对象 获取到 拼音,和拼音的首字母

    // pinyin

    - (NSString *)transformToPinyin{

        NSMutableString * mutableString = [NSMutableString stringWithString:self];

        CFStringTransform((CFMutableStringRef) mutableString, NULL, kCFStringTransformToLatin, false);

        mutableString = (NSMutableString *)[mutableString stringByFoldingWithOptions:NSDiacriticInsensitiveSearch locale:[NSLocale currentLocale]];

        mutableString = [[mutableString stringByReplacingOccurrencesOfString:@" " withString:@""] mutableCopy];

        return mutableString.lowercaseString;

    }

    //

    - (NSString * )transformToPinyinFirstLetter{

        NSMutableString * stringM = [NSMutableString string];

        

        NSString * temp = nil;

        for (int i = 0; i < [self length]; i ++) {

            

            temp = [self substringWithRange:NSMakeRange(i, 1)];

            

            NSMutableString * mutableString = [NSMutableString stringWithString:temp];

            

            CFStringTransform((CFMutableStringRef)mutableString, NULL, kCFStringTransformToLatin, false);

            

            mutableString = (NSMutableString *)[mutableString stringByFoldingWithOptions:NSDiacriticInsensitiveSearch locale:[NSLocale currentLocale]];

            

            mutableString = [[mutableString substringToIndex:1] mutableCopy];

            

            [stringM appendString:(NSString *)mutableString];

        }

        return stringM.lowercaseString;

    }

    将这两个方法添加到NSString的分类中,作用是:获取一个字符串对像的拼音,和拼音首字母

    + (NSString *)getPinyinWithString:(NSString *)string{

       

        NSString * pinyin;

        if ([string length]) {

            NSMutableString * ms = [[NSMutableString alloc] initWithString:string];

            if (CFStringTransform((__bridge CFMutableStringRef)ms, 0, kCFStringTransformMandarinLatin, NO)) {

                

            }

            if (CFStringTransform( (__bridge CFMutableStringRef)ms, 0, kCFStringTransformStripDiacritics, NO)) {

            

            }

            pinyin = ms;

        }

        return pinyin;

    }

    + (NSString *)getFirstLetterWithString:(NSString *)string{

       

        NSString * regex = @"^[a-zA-Z]*$";

        NSString * firstLetter = [string substringToIndex:1];

        

        NSPredicate * predicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex];

        

        if ([predicate evaluateWithObject:firstLetter] == YES) {

            return [firstLetter uppercaseString];

        }else {

            return @"~";

        }

    }

      将汉字转换成拼音

    做好了这些以后,所有就是把你所搜的内容在 模型数组中搜索,所搜到的时候就显示出来

    代码在GitHub上面有需要可以下载看看:https://github.com/Amuxiaomu/SearchDemo

  • 相关阅读:
    css选择器学习(二)属性选择器
    css选择器学习(一)
    css引用优先级
    canvas制图学习
    cookie,localStorage,sessionStorage
    HTTP协议中get和post的区别
    台灯发展史
    Object类实现的方法
    react学习网站
    什么是接口测试,接口测试的目的,如何进行接口测试
  • 原文地址:https://www.cnblogs.com/DreamLinku/p/5743296.html
Copyright © 2011-2022 走看看