美文网首页iOS开发经验iOS 开发-笔记iOS开发资料收集区
【iOS】环信聊天对话支持链接点击跳转

【iOS】环信聊天对话支持链接点击跳转

作者: 飛呈Geek | 来源:发表于2016-06-06 18:58 被阅读1723次
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.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

/*
 *  链接点击回调
 *
 *  @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];
    }
}

OK,现在可以点击链接了,打完收工。

相关文章

网友评论

  • bfeb34e13021:楼主,demo能分享下么,上面的百度云链接过期了@GF极客天涯
  • yzhi00:你好,使用你提供的方法,发现有个bug。就是如果发送的文本消息内容比较长的时候,比如6行以上的时候,会发现最底下部分消息显示不出来,需要上下滑动一下才会显示完全,我运行你的DEMO也是这样,请问这个问题该怎么处理好呢?谢谢!!!
    yzhi00:@飛呈Geek 额,好吧,我就是计算环信bubbleView部分有问题,采用了其他方法实现了
    飛呈Geek:@yzhi00 样式我也没有改,找到环信bubbleView计算的部分看吧。
    yzhi00:或者复制一大段话发送,也是显示不全,需要重新上下滑动才能正常显示,但是字体会自动缩小了
  • Amy_qinbu:你好,百度圆盘下载下来的demo怎么解压不了啊
    飛呈Geek:@2017你好 重新下载试试呢,之前别人有下载过的
  • visumall官方助手:等了一晚上,这个版本完美实现了,感谢!
  • 飛呈Geek:几个月没上简书了,文章是没上红包的版本。GitHub是上了红包之后改了的。晚上用官网最新的版本写一个,然后更新一下文章。误导大家对不住。
    飛呈Geek:@oneyoung 更新了,可以运行的Demo也传到百度云了
    visumall官方助手:刚好我正纠结我这一块怎么弄呢,楼主,坐等你的更新中.
  • 0668c9156f1e:第一:找不到所谓的labelDelegate 第二:你挂在github上的代码也没有LabelDelegate这东西
    0668c9156f1e:@飛呈Geek 楼主神速啊,我马上下下来学习一波,非常感谢
    飛呈Geek:@MustangYM 看更新得来吧
    飛呈Geek:几个月没上简书了,文章是没上红包的版本。GitHub是上了红包之后改了的。晚上用官网最新的版本写一个,然后更新一下文章。误导大家对不住。
  • 0668c9156f1e:第六步的labelDelegate在哪里 ?
  • 39af7ce2a2d1:你这个方法,我在第六步没找到labeldelegate啊,demo里也没有啊!
    飛呈Geek:@固执的屌丝 更新了…有完整Demo
    0668c9156f1e:来来来 , 你告诉我你第六步的labelDelegate在哪里 ?
    39af7ce2a2d1:不用labeldelegate,直接用delegate 根本就不走回调啊,根本没执行代理方法,这是怎么回事啊
  • _喵喵:你好 我使用了环信的长按手势 是不是会影响这个的调用
    飛呈Geek:@_喵喵 不会,更新的GIF有演示
  • 不会游泳的飞鱼:楼主想请问下 你的labeldelegate 是在哪里声明的
    飛呈Geek:@DIOS2012 https://github.com/fcgeek/myEaseMessage 相关代码放这了
    mayday2024:@飛呈Geek 你代码里也没有使用 labeldelegate,只是delegate.能处理多个链接吗?按你的我还没集成功过,能直接弄个demo上去吗?
    飛呈Geek:@不会游泳的飞鱼 TTTAttributedLabel 库里面的
  • 681916139107:你好 ,我这集成到第6步 到第7步来使用的时候,发现TTTAttributedLabel的代理方法不响应,不知道是怎么回事
    飛呈Geek:@法兰克1989 https://github.com/fcgeek/myEaseMessage 相关代码放上去了
    681916139107:@飛呈Geek 你能把你的这部分代码给我参考看看吗?我看看我的跟你的有啥不同:stuck_out_tongue_winking_eye:
    飛呈Geek:@法兰克1989 跟一下事件走到哪里了看呗
  • 小绵羊与大灰狼吖:你的第7步和上面格格不入啊,里面写的swift,调的CI哪里的啊
    飛呈Geek:@随心syl 第七部是实现代理…方法内部自行处理
  • GF极客天涯:你好 ,我这集成到第6步找不到这个方法didSelectLinkWithURL这个方法
    飛呈Geek:@GF极客天涯 https://github.com/TTTAttributedLabel/TTTAttributedLabel/blob/master/TTTAttributedLabel/TTTAttributedLabel.h
    line 452

本文标题:【iOS】环信聊天对话支持链接点击跳转

本文链接:https://www.haomeiwen.com/subject/rwzrdttx.html