【iOS】TTTAttributedLabel鏈接點(diǎn)擊

TTTAttributedLabel可以滿足在一段文本內(nèi)容中展示網(wǎng)址鏈接:

TTTAttributedLabel *label = [TTTAttributedLabel alloc] initWithFrame:frame];
label.delegate = self;
label.enabledTextCheckingTypes = NSTextCheckingTypeLink;
label.numberOfLines = 0;
[self.view  addSubView:label];
IMG_0185.PNG

當(dāng)然你也可以更改鏈接的樣式:

NSMutableDictionary *linkAttributes = [NSMutableDictionary dictionary];
[linkAttributes setValue:[NSNumber numberWithBool:NO] forKey:(NSString *)kCTUnderlineStyleAttributeName];
[linkAttributes setValue:(__bridge id)ciweiLinkColor.CGColor forKey:(NSString *)kCTForegroundColorAttributeName];
label.linkAttributes = linkAttributes;
IMG_0181.PNG

只需要實(shí)現(xiàn)代理方法:

- (void)attributedLabel:(TTTAttributedLabel *)label
   didSelectLinkWithURL:(NSURL *)url{
//這里可以對(duì)點(diǎn)擊的url進(jìn)行操作
}

在很多的社交類軟件包括微信、微博等軟件中常常會(huì)遇到下面這樣的需求:


IMG_0183.PNG
在帖子評(píng)論中,如果這個(gè)評(píng)論被回復(fù)了(子回復(fù)),子回復(fù)中的昵稱可點(diǎn)擊并且點(diǎn)擊后一般是去這個(gè)用戶的個(gè)人主頁面:
NSString *string = [NSString stringWithFormat:@"%@ 回復(fù) %@:%@",reply.nickname,reply.toNickname,reply.content];
label.text = string;
    
NSRange range = NSMakeRange(0, reply.nickname.length);
[self addLinkToURL:[NSURL URLWithString:[NSString stringWithFormat:@"scheme://?type=1&business_id=%@",reply.userId]] withRange:range];

NSRange toRange = NSMakeRange(reply.nickname.length+4, reply.toNickname.length);
[self addLinkToURL:[NSURL URLWithString:[NSString stringWithFormat:@"scheme://?type=1&business_id=%@",reply.toUserId]] withRange:toRange];

因?yàn)檫@里用到時(shí)通過點(diǎn)擊連接跳轉(zhuǎn)到app內(nèi)部的一個(gè)現(xiàn)有頁面,所以這里我傳入的鏈接是Scheme Url,在處理代理方法的時(shí)候:

- (void)attributedLabel:(TTTAttributedLabel *)label
   didSelectLinkWithURL:(NSURL *)url{
  NSString *urlStr = [url absoluteString];
  if([urlStr hasPrefix:@"scheme"]){
    [[UIApplication sharedApplication] openURL:url];
  }else{
    //這里可以對(duì)點(diǎn)擊的url進(jìn)行操作
  }
}

然后在AppDelegate中處理點(diǎn)擊昵稱的方法,這里會(huì)把昵稱的超鏈接傳入url:

-(BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation{
}

其實(shí)大可不必這么費(fèi)勁,完全可以將其分成兩部分控件:第一部分展示昵稱信息,給其賦予點(diǎn)擊事件;第二部分展示回復(fù)文本內(nèi)容。

但是考慮到,如果是從一個(gè)分享網(wǎng)頁中點(diǎn)擊昵稱,需要app作出響應(yīng),是的自己的app更加靈活;或者是在回復(fù)內(nèi)容中需要做@某個(gè)用戶的操作,為了以后的擴(kuò)展就這么干了?!救收咭娙省?/p>

點(diǎn)擊帖子回復(fù)對(duì)其進(jìn)行回復(fù)操作:

對(duì)label的父控件添加點(diǎn)擊手勢(shì):

UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(subReplyClick:)]; 
[view addGestureRecognizer:tap];

但是運(yùn)行代碼之后發(fā)現(xiàn)TTTAttributedLabel的父控件添加手勢(shì)之后,其代理方法*attributedLabel:(TTTAttributedLabel *)label
didSelectLinkWithURL:(NSURL )url不再被執(zhí)行。

解決手勢(shì)沖突:

UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(subReplyClick:)]; 
tap.delegate = self;
[view addGestureRecognizer:tap];
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
{
    if ([touch.view isKindOfClass:[TTTAttributedLabel class]]){
        TTTAttributedLabel *label = (TTTAttributedLabel *)touch.view;
        if ([label containslinkAtPoint:[touch locationInView:label]]){
            return NO;
        }else{
            return YES;
        }
    }else{
        return YES;
    }
}

然后現(xiàn)在就應(yīng)該是可以了?。?!TTTAttributedLabel是一個(gè)很強(qiáng)大控件,其他的使用方法以后再說吧。。。

最后編輯于
?著作權(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)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 15,329評(píng)論 4 61
  • 【Photoreading數(shù)量】從2016年12月19日起,我已經(jīng)PR了124本書。 【豆瓣評(píng)分】7.2 【個(gè)人評(píng)...
    有才有閑閱讀 261評(píng)論 0 0
  • ――今天,我就要回家。 我看見花草樹木從我眼前飄過, 我看著白的黑的紅的綠的黃的; 我看見滾滾長(zhǎng)江翻起層層波浪, ...
    開心鬼鬼閱讀 507評(píng)論 0 2
  • 簡(jiǎn)以兮 我喜歡用文字記錄自己的一點(diǎn)一滴,哪怕是不開心了,或者感覺自己長(zhǎng)大了一丟丟,我都喜歡寫下,這雖然不是什么值得...
    簡(jiǎn)以兮閱讀 310評(píng)論 0 2
  • 追隨得到的《財(cái)富自由之路》專欄快一年了,坦白講,就是奔著財(cái)富來的。但一開始就被震撼到了,從最初的懵懂到逐漸的清明,...
    起子先生閱讀 248評(píng)論 0 0

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