iOS开发小技巧 - label中的文字添加点击事件
Label中的文字添加点击事件
GitHub地址:https://github.com/lyb5834/YBAttributeTextTapAction
以前老师讲过类似的功能,自己懒得回头看了,找了很多第三方的,感觉这个小巧便利,作者只是扩展了分类,实现起来代码也少.先来个效果图

- 自己的项目,直接上代码
- (void)setTopicModel:(CYQTopicModel *)topicModel
{
_topicModel = topicModel;
NSArray *likeArr = self.topicModel.userLike;
if (!likeArr.count) return; // 没有点赞的直接返回
NSMutableArray *ranges = [NSMutableArray array]; // 特殊字符的Range集合,修改文字颜色用
NSMutableArray *actionStrs = [NSMutableArray array]; // 将要添加点击事件的字符串集合
NSString *string = @"";
for (int i=0; i<likeArr.count; i++) {
CYQAccount *account = likeArr[i];
// 拼接字符串
string = [string stringByAppendingString:account.userName];
[actionStrs addObject:account.userName];
if (i != likeArr.count - 1) {
string = [string stringByAppendingString:@","];
}
// 特殊字符的Range
NSRange range = [string rangeOfString:account.userName];
[ranges addObject:[NSValue valueWithRange:range]];
}
// 转换成富文本字符串
NSMutableAttributedString *attrStr = [[NSMutableAttributedString alloc] initWithString:string];
[attrStr addAttributes:@{NSFontAttributeName : [UIFont systemFontOfSize:14.f]} range:NSMakeRange(0, string.length)];
// 最好设置一下行高,不设的话默认是0
NSMutableParagraphStyle *style = [[NSMutableParagraphStyle alloc] init];
style.lineSpacing = 0;
[attrStr addAttribute:NSParagraphStyleAttributeName value:style range:NSMakeRange(0, string.length)];
// 给指定文字添加颜色
for (NSValue *rangeVal in ranges) {
[attrStr addAttributes:@{NSForegroundColorAttributeName : [UIColor blueColor]} range:rangeVal.rangeValue];
}
self.likeLabel.attributedText = attrStr;
// 给指定文字添加点击事件,并设置代理,代理中监听点击
[self.likeLabel yb_addAttributeTapActionWithStrings:actionStrs delegate:self];
}
- 代理中具体的事件没有处理,方法中的index参数跟模型集合一一对应,到时候直接拿到相应的模型来做事情就可以
// 弹窗的宏
#define ChaosAlertShow(messageText,buttonName) \
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"提示" message:(messageText) \
delegate:nil cancelButtonTitle:(buttonName) otherButtonTitles: nil];\
[alert show];
#pragma mark - YBAttributeTapActionDelegate
- (void)yb_attributeTapReturnString:(NSString *)string range:(NSRange)range index:(NSInteger)index
{
NSString *message = [NSString stringWithFormat:@"点击了“%@”字符\nrange: %@\nindex: %ld \n跳转到\"%@\"的个人界面",string,NSStringFromRange(range),index,string];
ChaosAlertShow(message, @"取消");
CLog(@"%@",message);
}
iOS开发小技巧 - label中的文字添加点击事件的更多相关文章
- iOS开发小技巧--TableView中headerView的循环利用,以及自定义的headerView
一.首先要搞清楚,tableView中有两种headerView,一个是tableHeaderView,另一个是headerView.前者就一个;后者根据session决定个数 headerView的 ...
- iOS开发小技巧--自定义带有占位文字的TextView(两种方式)
自定义控件注意或框架注意:自己暴露在外面的属性,一定要重写setter,保证外界与内部的交互性 一.方案一:通过drawRect:方法将文字画到textView中,监听文字改变用的是通知中心(代理也可 ...
- iOS开发小技巧--tableView中实现无数据无分割线,有数据才有分割线
通过通讯录练习GET的技能
- iOS开发小技巧 - UILabel添加中划线
iOS开发小技巧 遇到的问题: 给Label添加中划线,然后并没有效果 NSString *str = [NSString stringWithFormat:@"合计金额 ¥%.2f&quo ...
- iOS开发小技巧 - runtime适配字体
iOS开发小技巧 - runtime适配字体 版权声明:本文为博主原创文章,未经博主允许不得转载,有问题可联系博主Email: liuyongjiesail@icloud.com 一个iOS开发项目无 ...
- iOS开发实用技巧—Objective-C中的各种遍历(迭代)方式
iOS开发实用技巧—Objective-C中的各种遍历(迭代)方式 说明: 1)该文简短介绍在iOS开发中遍历字典.数组和集合的几种常见方式. 2)该文对应的代码可以在下面的地址获得:https:// ...
- Swift开发小技巧--TabBar中间按钮的添加方案
TabBar中间按钮的添加方案 之前做百思项目的时候,也有一个中间按钮,当时是重写的TabBar,这里介绍一个新的方法 给TabbarVC多添加添加一个控制器,这个控制器的作用仅仅是用来占位的,多了这 ...
- iOS开发小技巧--即时通讯项目:消息发送框(UITextView)高度的变化; 以及UITextView光标复位的小技巧
1.即时通讯项目中输入框(UITextView)跟随输入文字的增多,高度变化的实现 最主要的方法就是监听UITextView的文字变化的方法- (void)textViewDidChange:(UIT ...
- 【转】IOS开发小技巧
1,Search Bar 怎样去掉背景的颜色(storyboard里只能设置background颜色,可是发现clear Color无法使用). 其实在代码里还是可以设置的,那就是删除背景view [ ...
随机推荐
- .NET Core之Entity Framework Core 你如何创建 DbContext
本文版权归博客园和作者吴双共同所有,欢迎转载,转载和爬虫请注明博客园蜗牛原文地址 http://www.cnblogs.com/tdws/p/5874212.html. 目前国内各大论坛,各位大牛的分 ...
- java代理模式之静态代理
作为一个初级开发者,可能不会接触到代理模式,但是在很多框架的使用中都不知不觉使用了代理模式,比如servlet的过滤器链,spring的AOP,以及spring mvc的拦截器等.所以了解代理模式对于 ...
- js与java正则表达式处理字符串问题
在编写处理字符串的程序或网页时,经常会有查找符合某些复杂规则的字符串的需要.正则表达式就是用于描述这些规则的工具.换句话说,正则表达式就是记录文本规则的代码.合理使用正则表达式确实会为程序员省去很多字 ...
- Css3新特性总结之边框与背景(二)
一.条纹背景 利用background为linear-gradient函数实现,linear-gradient取值如下: <angle>:角度,渐变的方向 to left right to ...
- Dynamics CRM 2015-如何修改Optionset Default Value
在日常工作中,我们时不时会遇到在CRM测试环境上添加Optionset的时候,Default Value是某个值,但换到Production环境或者其他环境,添加的时候,Default Value可能 ...
- Critical: Update Your Windows Secure Channel (cve-2014-6321,MS14-066)
前言:风雨欲来山满楼,下半年开始各种凶猛的漏洞层出不穷,天下已经不太平,互联网已经进入一个新的台阶 0x01 cve-2014-6321 11月的补丁月,微软请windows的用户吃了顿大餐,发布了1 ...
- Project server 2016 “没有为此项目配置网站”错误处理
问题: 没有为此项目配置网站. There is no site configured for this project 解决办法: 依次点击设置>PWA设置>连接到sharepoint网 ...
- android 帧动画,补间动画,属性动画的简单总结
帧动画——FrameAnimation 将一系列图片有序播放,形成动画的效果.其本质是一个Drawable,是一系列图片的集合,本身可以当做一个图片一样使用 在Drawable文件夹下,创建ani ...
- html如何和CSS联系起来
CSS <Cascading Style Sheet>层叠样式表 .级联样式表,用于控制Web页面的外观: Html中使用CSS下面讲述2种常用方法: 1.连接式:可以实现CSS和Ht ...
- 实现CheckBox的三种选中状态(全选、半选、不选)在GridView中模拟树形的功能
度娘了很多帖子,只说三种状态要用图片替换来做,但没找到有用的例子,被逼自己写了一个 三方控件肯定是很多的,如jstree,可以直接用 由于公司的UDS限制,不能上传图片,只能文字说明了. 就是要在gr ...