YYKit之YYLabel

本文只對富文本中部分文字添加點(diǎn)擊事件做簡單介紹

1.添加點(diǎn)擊事件

YYLabel中給部分文字添加點(diǎn)擊事件主要是在富文本排版的時(shí)候,創(chuàng)建YYTextHighlight對象,設(shè)置Range,并可以可以給他賦值一個(gè)JSON字典以便在之后點(diǎn)擊文本之后可以獲取到內(nèi)容(如@{@"action":@"comment"}).
設(shè)置YYTextHighlight的時(shí)候同時(shí)可以設(shè)置YYTextBorder,也就是背景顏色以及圓角等等,再點(diǎn)擊的時(shí)候看起來不會(huì)顯得空洞,有直觀的反饋
設(shè)置富文本的代碼如下

    NSString *showStr = @"我有一頭小毛驢,從來也不騎~~";
    NSMutableAttributedString *authorSayAtt = [[NSMutableAttributedString alloc] initWithString:showStr];
    [authorSayAtt setColor:[UIColor blackColor]];
    //YYTextBorder設(shè)置點(diǎn)擊的背景顏色,圓角
    YYTextBorder *textBoder = [YYTextBorder new];
    textBoder.insets = UIEdgeInsetsMake(0, 0, 0, 0);
    textBoder.cornerRadius = 5;
    textBoder.fillColor = UIColorFromRGB(0xd7d7d7);
    //給文字設(shè)置Highlight
    YYTextHighlight *hightLight = [YYTextHighlight new];
    [hightLight setBackgroundBorder:textBoder];
    [authorSayAtt setTextHighlight:hightLight range:[showStr rangeOfString:@"毛驢"]];
    YYTextContainer *container = [[YYTextContainer alloc] init];
    container.size = CGSizeMake(windWidth-kReaderLeftSpace*2, CGFLOAT_MAX);
    YYTextLayout *layout = [YYTextLayout layoutWithContainer:container text:authorSayAtt];
    //此處的YYTextLayout可以計(jì)算富文本的高度,他有一個(gè)屬性textBoundingRect和textBoundingSize,container.size是用來限制寬度的,可以計(jì)算高度
    //YYTextLayout是用來賦值給YYLabel,相當(dāng)于UILabel的attributedText
    //如果單純的做點(diǎn)擊處理可以用attributedText直接賦值給YYLabel,但是如果需要異步渲染就必須用YYTextLayout

然后在初始化YYLabel的地方,調(diào)用YYLabel的highlightTapAction屬性就可以獲取到點(diǎn)擊的區(qū)域,文本信息等

-(YYLabel *)authorSayLabel
{
    if (!_authorSayLabel) {
        _authorSayLabel = [[YYLabel alloc] init];
        _authorSayLabel.highlightTapAction = ^(UIView * _Nonnull containerView, NSAttributedString * _Nonnull text, NSRange range, CGRect rect) {
            
            YYLabel *useLabel = (YYLabel *)containerView;
            NSAttributedString *attribute = useLabel.textLayout.text;
            if (range.location >= text.length) {
                return ;
            }
            YYTextHighlight *heightLight = [attribute attribute:YYTextHighlightAttributeName atIndex:range.location];
            NSDictionary *dic = heightLight.userInfo;
            DLog(@"攜帶的值===%@",dic);
            //此處的dic,就是之前設(shè)置富文本時(shí)的字典
        };
    }
    return _authorSayLabel;
}

2.關(guān)于YYLabel設(shè)置點(diǎn)擊事件不響應(yīng)的問題,主要有幾個(gè)方面

(1).頁面是否有其他的手勢,例如UITapGestureRecognizer,如果有,需要設(shè)置其屬性cancelsTouchesInView和delaysTouchesBegan都為NO
(2).YYLabel是否添加在了滑動(dòng)視圖上面,如果是需要設(shè)置滑動(dòng)視圖的屬性delaysContentTouches為NO(canCancelContentTouches默認(rèn)為YES,不需改動(dòng))
(3).YYLabel添加在了滑動(dòng)視圖上(如UIScrollVIew上),并且滑動(dòng)視圖上還有UITapGestureRecognizer手勢,這個(gè)時(shí)候需要同時(shí)設(shè)置以上設(shè)置的三個(gè)屬性,否則有一種奇怪現(xiàn)象,點(diǎn)擊文字的時(shí)候如果輕點(diǎn)會(huì)先走UITapGestureRecognizer的方法,再走YYLabel的highlightTapAction點(diǎn)擊事件(右或者不走),稍用力點(diǎn)擊才能夠正常先走YYLabel的highlightTapAction,再觸發(fā)UITapGestureRecognizer的事件方法

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

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

  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 15,056評論 4 61
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,777評論 25 709
  • 一、濫用抗生素的結(jié)果:“超級細(xì)菌”出現(xiàn) 5月29日新聞報(bào)道說,美國境內(nèi)出現(xiàn)首例“無法被任何已知抗生素治愈的超級細(xì)菌...
    Ge萌萌閱讀 811評論 0 0
  • 如果看了標(biāo)題,你以為我要談男女問題,那么你不用往下看了?,F(xiàn)在,如果你看到了這句話,那么請往下看,因?yàn)槟闶且粋€(gè)好奇心...
    念下閱讀 309評論 0 0
  • 1. 爺爺比奶奶大九歲,他是個(gè)窮山村的窮小子,嗜書如命,可惜家里沒錢,送不起上學(xué),只能用僅有摳出來的錢財(cái)跳級完成專...
    聞奇跡閱讀 530評論 7 9

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