關(guān)于搜索的一個(gè)問(wèn)題

在項(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)”):

  1. 首先將搜索字符searchText轉(zhuǎn)拼音(因?yàn)檩斎氲目赡苁侵形?這里統(tǒng)一將結(jié)果轉(zhuǎn)為大寫(xiě)的拼音字母來(lái)判斷,不單獨(dú)判斷),
  2. 將查詢的結(jié)果進(jìn)行遍歷,取出查詢結(jié)果的每個(gè)字符,取出“到”;
  3. 將“到”轉(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è)中文文本。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容