在項(xiàng)目中做搜索會(huì)碰到這樣一個(gè)問(wèn)題:你輸入字母e,會(huì)模糊搜索出很多結(jié)果,比如“enter”,“empty”等,里面包含字母e,我們很容易就可以實(shí)現(xiàn)高亮字母e,但是結(jié)果中如果有中文,比如“這”,“者”,他們的拼音也包含字母e,那么怎么做到高亮結(jié)果呢?
方法如下(比如輸入了搜索字符searchText : e, 其中一個(gè)結(jié)果是:“到這里來(lái)”):
- 首先將搜索字符searchText轉(zhuǎn)拼音(因?yàn)檩斎氲目赡苁侵形?這里統(tǒng)一將結(jié)果轉(zhuǎn)為大寫(xiě)的拼音字母來(lái)判斷,不單獨(dú)判斷),
- 將查詢的結(jié)果進(jìn)行遍歷,取出查詢結(jié)果的每個(gè)字符,取出“到”;
- 將“到”轉(zhuǎn)為拼音“DAO”,判斷“DAO”是否包含搜索字符searchText,如果包含,那么“到”高亮,否則不用高亮;或者搜索字符包含了“DAO”,也高亮,否則不高亮(這里看是否有這個(gè)需求)
3.將所有判斷的結(jié)果都依次組裝到一個(gè)可變富文本字符串retStr中;
代碼如下:
/**
@param orgText 搜索得到的結(jié)果
@param searchText 搜索輸入的問(wèn)題本
@param font 字體大小
@param orgColor 默認(rèn)字體顏色
@param highColor 高亮字體顏色
@return 可變字符串
*/
- (NSAttributedString *)generalSearchHighColorTextWithText:(NSString *)orgText
searchText:(NSString *)searchText
font:(UIFont *)font
orgTextColor:(UIColor *)orgColor
highColor:(UIColor *)highColor
{
NSMutableAttributedString *retStr = [[NSMutableAttributedString alloc] init];
NSString *nameItem = nil;
NSString *nameItemPinYi = nil;
NSAttributedString *nameItemAStr = nil;
UIColor *retColor = nil;
NSString *searchT = [searchText fullSpellPinYinName];//fullSpellPinYinName 為中文轉(zhuǎn)拼音的分類(lèi)方法
for (NSInteger i = 0; i < orgText.length; ++i)
{
nameItem = [orgText substringWithRange:NSMakeRange(i, 1)];
nameItemPinYi = [nameItem fullSpellPinYinName];
if (nameItemPinYi.length > 0)
{
if (nameItemPinYi.length >= searchT.length)
{
if ([nameItemPinYi containsString:searchT])
{
retColor = highColor;
}
else
{
retColor = orgColor;
}
}
else
{
if ([searchT containsString:nameItemPinYi]){
retColor = highColor;
}
else
{
retColor = orgColor;
}
}
}
else
{
retColor = orgColor;
}
//genaralAttributeStringWith 是用文字,字體,顏色生成富文本的分類(lèi)方法
nameItemAStr = [UILabel genaralAttributeStringWith:nameItem font:font color:retColor];
[retStr appendAttributedString:nameItemAStr];
}
return retStr;
}
總的來(lái)說(shuō),這里就是討論中文結(jié)果的拼音中含有輸入的字符串,該如何高亮這個(gè)中文文本。