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