iOS中的模糊搜索
项目中经常要做一个模糊搜索(并非使用数据库的)的小功能,于是自己查资料做了一个Demo,感觉挺麻烦的.
一.大致步骤
1. iOS中的搜索控件必定会用到UISearchBar这个控件,所以会用到这个控件的相关方法,最主要的就是其代理方法:
```
// called when text changes (including clear) 在searchBar中输入内容时就会调用
- (void)searchBar:(UISearchBar*)searchBar textDidChange:(NSString*)searchText;
```
2. 就是要显示结果,将内容写到UITableView中,用到其基本的代理方法
3. 就是将汉字,神马乱七八糟的转化成拼音.将源数据(要进行比对的数据)都得转成拼音.
```
/ /将字符串转为拼音
//转成了可变字符串
NSMutableString*str = [NSMutableString stringWithString:aString];
CFStringTransform((CFMutableStringRef)str,NULL,kCFStringTransformMandarinLatin,NO);
//再转换为不带声调的拼音
CFStringTransform((CFMutableStringRef)str,NULL,kCFStringTransformStripDiacritics,NO);
```
最后,就是进行比对.将searchBar中的拼音或者首字母等调用方法查看在源数据中拼音中是否有相同部分.
```
// 查找NSString对象有没有searchString的内容
- (NSRange)rangeOfString:(NSString*)searchString options:(NSStringCompareOptions)mask;
```
二.实用的方法
本方法,引用自他人,侵权删
可以将汉字转化成一列包含拼音,首字母,汉字内容的字符串
如:汉字->#hanzi,han#zi,#hz,#汉字
```
- (NSString*)transformToPinyin:(NSString*)aString
{
//转成了可变字符串
NSMutableString*str = [NSMutableString stringWithString:aString];
CFStringTransform((CFMutableStringRef)str,NULL,kCFStringTransformMandarinLatin,NO);
//再转换为不带声调的拼音
CFStringTransform((CFMutableStringRef)str,NULL,kCFStringTransformStripDiacritics,NO);
NSArray*pinyinArray = [strcomponentsSeparatedByString:@" "];
NSMutableString*allString = [NSMutableStringnew];
intcount =0;
for(inti =0; i < pinyinArray.count; i++)
{
for(inti =0; i < pinyinArray.count;i++)
{
if(i == count) {
[allStringappendString:@"#"];//区分第几个字母
}
[allStringappendFormat:@"%@",pinyinArray[i]];
}
[allStringappendString:@","];
count ++;
}
NSMutableString*initialStr = [NSMutableStringnew];//拼音首字母
for(NSString*sinpinyinArray)
{
if(s.length>0)
{
[initialStrappendString: [ssubstringToIndex:1]];
}
}
[allStringappendFormat:@"#%@",initialStr];
[allStringappendFormat:@",#%@",aString];
returnallString;
}
```