chat.gif
環信版本:
3.3.2
相關代碼放到github上了:https://github.com/fcgeek/myEaseMessage
以前的版本是直接支持的,不知道從什么時候起,不支持了。應該是新的一波人重構了代碼,然后還沒有處理到鏈接支持吧。
Demo地址鏈接: https://pan.baidu.com/s/1qYx3ypA 密碼: vv57
原料
步奏
1.導入TTTAttributedLabel到EaseUI
,詳情見它的github;
2.EaseUI
文件夾中EaseBubbleView.h
的textLabel
類型替換成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
/*
* 鏈接點擊回調
*
* @param 鏈接
*/
- (void)messageCell:(EaseMessageCell *)cell didSelectLinkWithURL:(NSURL *)url;
/// ....忽略代碼
@end
"EaseMessageCell.m" 實現點擊鏈接傳遞Delegate
@interface EaseMessageCell()<TTTAttributedLabelDelegate> // Line 41
// `畫重點`:設置delegate
_bubbleView.textLabel.delegate = self;//Line 173
// `畫重點`:很多朋友說點擊沒回調,問題在這里;
tapRecognizer.cancelsTouchesInView = NO; //Line 224
// `畫重點`:注釋了環信自己的樣式,`BubbleView`計算部分會存在問題,這個自己想辦法處理吧
// 提供兩個思路 1、`TTTAttributedLabel`使用環信的;2、環信`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.實現EaseMessageCell
點擊鏈接方法
"EaseMessageViewController.h"添加EaseMessageViewControllerDelegate
點擊鏈接跳轉方法
/**
* 點擊cell鏈接時
*/
- (void)messageViewController:(EaseMessageViewController *)viewController
didSelectLinkWithURL:(NSURL *)url; //Line 47
6.EaseMessageViewController.m
實現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];
}
}