类似新浪微博评论的 @ 及 #某话题# 功能的实现
TYAttributedLabel是一个强大的属性文本控件。它支持富文本、图文混排显示;它支持行间距、字间距、自适应高度、指定行数;它支持添加高度自定义文本属性,支持添加属性文本、自定义链接,新增高亮效果显示(文字和背景);它还支持添加UIImage和UIView控件。
在微博信息流中点击@某人然后跳转到某人的主页,以及点击#话题#跳到相关话题页,类似于HTML中的文本链接。使用TYAttributedLabel实现类似新浪微博发布评论后的@某人及#话题#功能(如图):
示例代码
#define RGBOF(rgbValue) [UIColor colorWithRed:((float)((rgbValue & 0xFF0000) >> 16))/255.0 green:((float)((rgbValue & 0xFF00) >> 8))/255.0 blue:((float)(rgbValue & 0xFF))/255.0 alpha:1.0]#import "ViewController.h"
#import "TYAttributedLabel.h"@interface ViewController () <TYAttributedLabelDelegate>@end@implementation ViewController- (void)viewDidLoad {[super viewDidLoad];// Do any additional setup after loading the view.NSString *text = @"在围剿#斯克鲁人#的战斗中,#克里人#星际战队成员弗斯(@布丽·拉尔森 Brie Larson 饰)不幸成为对方的俘虏。斯克鲁人尝试探究弗斯的记忆,最终发现连弗斯本人都不知道的一段往事,进而也得知名为@温迪•劳森 博士的女子掌握着他们急于得到的时空引擎。趁对方不备,拥有强大超能力的弗斯摆脱束缚,逃到了代号为#C-53#的地球,而这里也正是她那段失落的记忆的发生地。未过多久,#神盾局#探员弗瑞特工(@塞缪尔·杰克逊 Samuel L. Jackson 饰)找上门来,而紧随其后的斯克鲁人更是引发了地球人前所未见的大骚动。\n\n\t在这一过程中,弗瑞特工意识到事态的严重性,并且帮助弗斯认清本来的自己。倔强的弗斯,终于找到了真正需要保护的东西……";// 属性文本生成器TYTextContainer *textContainer = [[TYTextContainer alloc]init];textContainer.text = text;textContainer.textAlignment = NSTextAlignmentLeft;textContainer.textColor = RGBOF(0x333333);textContainer.font = [UIFont systemFontOfSize:14];//使用正则匹配出 #某话题# 所在位置NSRegularExpression *expr = [NSRegularExpression regularExpressionWithPattern:@"#[^#]*#" options:NSRegularExpressionCaseInsensitive error:nil];[expr enumerateMatchesInString:text options:NSMatchingReportProgress range:NSMakeRange(0, text.length) usingBlock:^(NSTextCheckingResult * _Nullable result, NSMatchingFlags flags, BOOL * _Nonnull stop) {// 下划线可点击文字TYLinkTextStorage *linkTextStorage = [[TYLinkTextStorage alloc]init];linkTextStorage.range = result.range;linkTextStorage.textColor = RGBOF(0x7fa1c1);linkTextStorage.linkData = [text substringWithRange:result.range];linkTextStorage.underLineStyle = kCTUnderlineStyleNone;//取消下划线[textContainer addTextStorage:linkTextStorage];}];//使用正则匹配出 @某对象 所在位置NSRegularExpression *expr2 = [NSRegularExpression regularExpressionWithPattern:@"@\\S+\\s+" options:NSRegularExpressionCaseInsensitive error:nil];[expr2 enumerateMatchesInString:text options:NSMatchingReportProgress range:NSMakeRange(0, text.length) usingBlock:^(NSTextCheckingResult * _Nullable result, NSMatchingFlags flags, BOOL * _Nonnull stop) {// 下划线可点击文字TYLinkTextStorage *linkTextStorage = [[TYLinkTextStorage alloc]init];linkTextStorage.range = result.range;linkTextStorage.textColor = RGBOF(0x7fa1c1);linkTextStorage.linkData = [text substringWithRange:result.range];linkTextStorage.underLineStyle = kCTUnderlineStyleNone;//取消下划线[textContainer addTextStorage:linkTextStorage];}];TYAttributedLabel *attrLbl = [[TYAttributedLabel alloc] initWithFrame:CGRectMake(30, 40, [UIScreen mainScreen].bounds.size.width - 60, 0)];[self.view addSubview:attrLbl];attrLbl.delegate = self;attrLbl.textContainer = textContainer;[attrLbl sizeToFit];
}#pragma mark - TYAttributedLabelDelegate
- (void)attributedLabel:(TYAttributedLabel *)attributedLabel textStorageClicked:(id<TYTextStorageProtocol>)textStorage atPoint:(CGPoint)point
{if ([textStorage isKindOfClass:[TYLinkTextStorage class]]) {id linkStr = ((TYLinkTextStorage*)textStorage).linkData;if ([linkStr isKindOfClass:[NSString class]]) {UIAlertView *alertView = [[UIAlertView alloc]initWithTitle:@"点击提示" message:linkStr delegate:nil cancelButtonTitle:@"确定" otherButtonTitles:nil];[alertView show];}}
}@end
类似新浪微博评论的 @ 及 #某话题# 功能的实现相关推荐
- python爬取微博恶评_详解用python写网络爬虫-爬取新浪微博评论
新浪微博需要登录才能爬取,这里使用m.weibo.cn这个移动端网站即可实现简化操作,用这个访问可以直接得到的微博id. 分析新浪微博的评论获取方式得知,其采用动态加载.所以使用json模块解析jso ...
- 阅读软件怎么添加书源_微信聊天怎么添加话题功能?微信聊天添加话题方法[多图]-软件资讯...
微信大家很熟悉,在不断的研究过程中微信也推出了非常多的实用功能,最近微信又在测试一个新的功能,可以在聊天的过程中添加#号,然后就可以直接关联到有关的信息,行程一个超链接,这样大家就可以直接点击进入一个 ...
- ajax文章采集6,网页采集AJAX滚动教程,以新浪微博评论采集为例
网页采集AJAX滚动教程,以新浪微博评论采集为例 2019-03-17 八爪鱼7.0教程--AJAX滚动教程 标签: 新手入门,新手,v7.0 2017/6/23 18:20:20 AJAX滚动教程 ...
- android 仿qq聊天背景,Android,_安卓实现类似QQ刚换聊天背景的功能,Android - phpStudy...
安卓实现类似QQ刚换聊天背景的功能 自己实现了一下,但对于一些手机一设置背景就出现闪退不知道为什么,大体思路就是获得用户选择的uri,然后如果屏幕分辨率小于图片的分辨率就对图片进行下处理,防止OOM. ...
- android 微信浮窗实现_Android实现类似qq微信消息悬浮窗通知功能
实现方法:(需要开启悬浮窗通知权限.允许应用在其他应用上显示) 一.利用headsup 悬挂式Notification,他是5.0中新增的,也就是API中的Headsup的Notification,可 ...
- linux java -cp lt; .txt_补交 20155202 蓝墨云班课 编写MyCP.java 实现类似Linux下cp XXX1 XXX2的功能...
蓝墨云班课 编写MyCP.java 要求: 编写MyCP.java 实现类似Linux下cp XXX1 XXX2的功能,要求MyCP支持两个参数: java MyCP -tx XXX1.txt XXX ...
- android 微信评论功能,Android仿微信朋友圈点击评论自动定位到相关行功能
最近闲来无事,随便看看各种UI实现的代码 打开你的微信朋友圈,点击评论,你就会发现有一个小细节:文本输入框的高度恰好定位到这条信息的底部位置 这个实现起来其实很简单,咱们就来看看吧 最简单的Recyc ...
- android 微信评论功能,Android仿微信朋友圈点击评论自动定位到相关行功能.pdf
Android仿仿微微信信朋朋友友圈圈点点击击评评论论自自动动定定位位到到相相关关行行功功能能 这篇文章主要介绍了android仿微信朋友圈点击评论自动定位到相关行功能的实现,本文图文并茂给大家介绍的 ...
- 仿新浪微博的ListView下拉更新功能
由于最近做的项目中也用到了这个功能,今天刚好实现了下,就趁现在有时间写篇博客分享下.在做的时候也参考了下别人的代码,毕竟站在巨人的肩膀上才会是自己更加强大.哈哈!先看看新浪的下拉更新是什么样的吧! O ...
最新文章
- php版程氏音乐cms管理系统 v3.0后台登录_程氏舞曲管理系统CMSPHP
- 2019年人工智能行业现状与发展趋势报告
- Asp.net网站的ClickOnce自动部署(2)-虚拟目录的配置
- 洛谷 P1111 修复公路(最小生成树)
- Nearest Interesting Number
- 电气论文实现:电力网络之 通过计算机得到电力网络节点阻抗矩阵(matlab)
- 线性规划的matlab实现
- Maven属性(properties)标签的使用
- 罐中研讨会:设置JBoss BRMS全日研讨会
- java api csdn_java api函数读出当前机器名以及版本号 csdn
- syslog打印不带等级_linux下syslog使用说明
- 作者:刘峰(1974-),男,中国科学院计算机网络信息中心高级工程师
- 新增一个主键自增长_使用技巧之——MyBatis如何返回插入主键
- python类概念是什么意思_python面向对象是什么意思?面向对象九大概念简介
- 51单片机基础实验例程
- 六度分隔,邓巴数和幂律如何主宰我们的社交网络
- 一文带你搞懂Vue中的Excel导入导出
- 软件工程项目:电梯调度
- 2022年阿里云双12服务器活动内容规则汇总及价格表
- 老领导调岗,你想跟他干,怎么说?
热门文章
- About 不以物喜 不以己悲
- 安卓手机如何防盗_安卓手机如何打开.exe文件 安卓手机exe文件怎么打开
- Android创建WebP图像
- 【蜂口 | AI人工智能】人脸美颜——龙鹏 深度学习与人脸图像应用连载(八)...
- Win10/Win11下清除windows defender安全中心病毒和威胁防护历史记录
- 古代汉语王力版复习重点
- IOS 后台执行 播放音乐
- 一日一技|Stata筛选出字符串中非数字的行
- 开机提示小娜无法在本计算机运行,win10 20h2提示此应用无法在你的电脑上运行解决方法...
- 性能起飞!驱动人生带你了解AMD FSR3.0及显卡驱动