【iOS】環(huán)信聊天對話支持鏈接點擊跳轉(zhuǎn)

chat.gif

環(huán)信版本:3.3.2
相關代碼放到github上了:https://github.com/fcgeek/myEaseMessage
以前的版本是直接支持的,不知道從什么時候起,不支持了。應該是新的一波人重構了代碼,然后還沒有處理到鏈接支持吧。
Demo地址鏈接: https://pan.baidu.com/s/1qYx3ypA 密碼: vv57

原料

步奏

1.導入TTTAttributedLabel到EaseUI,詳情見它的github;
2.EaseUI文件夾中EaseBubbleView.htextLabel類型替換成TTTAttributedLabel

#import <UIKit/UIKit.h>
@class TTTAttributedLabel; //Line 10
//text views
@property (strong, nonatomic) TTTAttributedLabel *textLabel; //Line 42

3.EaseBubbleView+Text.m中初始化textLabel

#import "TTTAttributedLabel.h" //Line 14

- (void)setupTextBubbleView //Line 45
{
    self.textLabel = [[TTTAttributedLabel alloc] initWithFrame:CGRectZero];
    self.textLabel.translatesAutoresizingMaskIntoConstraints = NO;
    self.textLabel.lineBreakMode = NSLineBreakByWordWrapping;
    self.textLabel.numberOfLines = 0;
    self.textLabel.enabledTextCheckingTypes = NSTextCheckingTypeLink;
    //`畫重點`: 支持交互動作
    self.backgroundImageView.userInteractionEnabled = YES; 
    [self.backgroundImageView addSubview:self.textLabel];
    
    [self _setupTextBubbleConstraints];
}

4.傳遞TTTAttributedLabelDelegate

"EaseMessageCell.h"的EaseMessageCellDelegate添加?點擊鏈接方法
#import "TTTAttributedLabel.h" //Line 19

@protocol EaseMessageCellDelegate <NSObject>

@optional

/*
 *  鏈接點擊回調(diào)
 *
 *  @param  鏈接
 */
- (void)messageCell:(EaseMessageCell *)cell didSelectLinkWithURL:(NSURL *)url;

/// ....忽略代碼

@end
"EaseMessageCell.m" 實現(xiàn)點擊鏈接傳遞Delegate
@interface EaseMessageCell()<TTTAttributedLabelDelegate> // Line 41

// `畫重點`:設置delegate
_bubbleView.textLabel.delegate = self;//Line 173

// `畫重點`:很多朋友說點擊沒回調(diào),問題在這里;
tapRecognizer.cancelsTouchesInView = NO; //Line 224

// `畫重點`:注釋了環(huán)信自己的樣式,`BubbleView`計算部分會存在問題,這個自己想辦法處理吧
// 提供兩個思路 1、`TTTAttributedLabel`使用環(huán)信的;2、環(huán)信`BubbleView`使用`TTTAttributedLabel`的樣式來計算
_bubbleView.textLabel.text = model.text;//.attributedText = [[EaseEmotionEscape sharedInstance] attStringFromTextForChatting:model.text textFont:self.messageTextFont];

#pragma mark - TTTAttributedLabelDelegate //Line 883
- (void)attributedLabel:(TTTAttributedLabel *)label didSelectLinkWithURL:(NSURL *)url {
    if ([_delegate respondsToSelector:@selector(messageCell:didSelectLinkWithURL:)]) {
        [_delegate messageCell:self didSelectLinkWithURL:url];
    }
}

5.實現(xiàn)EaseMessageCell點擊鏈接方法

"EaseMessageViewController.h"添加EaseMessageViewControllerDelegate點擊鏈接跳轉(zhuǎn)方法
/**
 *  點擊cell鏈接時
 */
- (void)messageViewController:(EaseMessageViewController *)viewController
         didSelectLinkWithURL:(NSURL *)url; //Line 47

6.EaseMessageViewController.m實現(xiàn)EaseMessageCellDelegate點擊鏈接方法

#pragma mark - EaseMessageCellDelegate  Line 1186
- (void)messageCell:(EaseMessageCell *)cell didSelectLinkWithURL:(NSURL *)url {
    if (self.delegate && [self.delegate respondsToSelector:@selector(messageViewController:didSelectLinkWithURL:)]) {
        [self.delegate messageViewController:self didSelectLinkWithURL:url];
    } else {
        [[UIApplication sharedApplication] openURL:url];
    }
}

OK,現(xiàn)在可以點擊鏈接了,打完收工。

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

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

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