概述

对UIlabel进行封装 用于辨别用户名 ,话题 ,链接,电话,高亮文字等,链接跳转网页,电话点击拨打电话,完美封装UIlabel,适合绝大多数需求

详细

代码下载:http://www.demodashi.com/demo/10804.html

 封装UIlabel辨别用户名,话题,链接,电话,高亮文字等,链接跳转网页,拨打电话完美封装UIlabel,适合绝大多数需求

一、准备工作

整体项目中,主要是自己自定义的一个GZLabel类

只需要依赖此自定义类,可以设置自己想要的所有效果。

二、程序实现

对UIlabel进行封装,让其识别一些Label不匹配的东西,我们就要利用

NSMutableAttributeString
来对其进行处理,我们用到的主要是它的子类
@property(nonatomic, strong)NSTextStorage *GZTextString;

主要就是对Label进行匹配,给其一个类型属性

我们想要达到自己想要的效果的话,就必须要对label进行分类处理

typedef NS_ENUM(NSUInteger , GZLabelStyle){GZLabelStyleNone = 0,GZLabelStyleUser = 1,GZLabelStyleTopic = 2,GZLabelStyleLink = 3,GZLabelStyleAgreement = 4,GZLabelStyleUserDefine = 5,GZLabelStylePhoneNumber = 6
};

给label设置各种属性,(点击前后颜色,代理 ,点击事件等)

/* 普通文字颜色 */
@property(nonatomic , strong)UIColor *GZLabelNormalColor ;
/* 选中时高亮背景色 */
@property(nonatomic , strong)UIColor *GZLabelHightLightBackgroundColor ;
/* 字符串+显示颜色 字典数组, */
@property(nonatomic, strong)NSArray<NSDictionary *> *GZLabelMatchArr;
/* 高亮文字设置颜色*/
-(void)setHightLightLabelColor:(UIColor *)hightLightColor forGZLabelStyle:(GZLabelStyle)GZLabelStyle;
/* delegate */
@property(nonatomic, weak)id<GZLabelDelegate> delegate;
/* 点击事件block */
@property(nonatomic, strong)TapGZLabel GZTapOperation;

设置自己想要的文字颜色,范围 位置

/* 用于记录用户选中的range */
@property(nonatomic, assign)NSRange selectedRange;
/* 用户记录点击还是松开 */
@property(nonatomic, assign)BOOL isSelected;
/* 用户文字颜色 */
@property(nonatomic, strong)UIColor *userHightColor;
/* 话题文字颜色 */
@property(nonatomic, strong)UIColor *topicHightColor;
/* 链接文字颜色 */
@property(nonatomic, strong)UIColor *linkHightColor;
/* 协议/政策文字颜色 */
@property(nonatomic, strong)UIColor *agreementHightColor;
/* 电话号码文字颜色 */
@property(nonatomic, strong)UIColor *PhoneNumberHightColor;
/* 链接范围 */
@property(nonatomic, strong)NSArray *linkRangesArr;
/* 用户名范围 */
@property(nonatomic, strong)NSArray *userRangesArr;
/* 话题范围 */
@property(nonatomic, strong)NSArray *topicRangesArr;
/* 协议/政策范围 */
@property(nonatomic, strong)NSArray *agreementRangesArr;
/* 电话号码范围 */
@property(nonatomic, strong)NSArray *PhoneNumberRangesArr;
/* 自定义要查找的范围 */
@property(nonatomic, strong)NSArray *userDefineRangesArr;

再者我们需要重写系统的属性

#pragma mark 重写系统的属性
-(void)setText:(NSString *)text{[super setText:text];[self prepareText];
}
-(void)setFont:(UIFont *)font{[super setFont:font];[self prepareText];
}
-(void)setTextColor:(UIColor *)textColor{[super setTextColor:textColor];[self prepareText];
}

系统回调

#pragma mark 系统回调
// 布局子控件
-(void)layoutSubviews{[super layoutSubviews];// 设置容器的大小为Label的尺寸self.textContainer.size = self.frame.size;
}

字符串匹配封装

#pragma mark 字符串匹配封装
// 查找用户给定的字符串的range
-(NSArray<NSDictionary*> *)getUserDefineStringsRange{if (self.GZLabelMatchArr.count == 0) return nil;NSMutableArray<NSDictionary*> *arrM = [NSMutableArray array];NSString *str = [self.GZTextString string];for (NSDictionary *dict in self.GZLabelMatchArr) {NSString *subStr = dict[@"string"];UIColor *color = dict[@"color"];// 没传入字符串if (!subStr) return nil;NSRange range = [str rangeOfString:subStr];// 没找到if (range.length == 0) continue;NSValue *value = [NSValue valueWithBytes:&range objCType:@encode(NSRange)];NSMutableDictionary *aDictM = [NSMutableDictionary dictionary];aDictM[GZRange] = value;aDictM[GZColor] = color;[arrM addObject:[aDictM copy]];}return [arrM copy];
}

创建正则表达式对象

-(NSArray *)getRanges:(NSString *)pattern{// 创建正则表达式对象NSError *error;NSRegularExpression *regex = [[NSRegularExpression alloc]initWithPattern:pattern options:0 error:&error];return [self getRangesFromResult:regex];
}

三、运行效果

这些只是我能用到的一些属性,如果你们需要其他的可以自己试着写或者联系我,我根据你们的需求来定义!

运行效果如下:

代码下载:http://www.demodashi.com/demo/10804.html

注:本文著作权归作者,由demo大师发表,拒绝转载,转载需要作者授权

封装UIlabel 辨别用户名 ,话题 ,链接,电话,高亮文字等相关推荐

  1. 弹窗要打开或保存来自_如何让 PopClip 支持印象笔记客户端:保存到印象笔记amp;高亮文字...

    自从印象笔记品牌独立并发布新APP后,Mac系统下很多工具不再支持与印象笔记客户端进行联动,PopClip 就是其中之一.目前 Popclip 官方并未将印象笔记加入到插件的支持中,不过我们可以手动修 ...

  2. word中将文档的高亮文字全部选中并加粗

    1.将鼠标放在高亮文字所在行,点击"查找",选择左下角格式中的突出显示 2."替换"为 选择格式–字体-加粗. 参考链接:http://club.excelho ...

  3. 怎么把一个网址链接转换成文字的形式, 就是点一下那段文字就进入该网站

    何把一个网址链接转换成文字的形式,点击一下那个文字,就可以进入该网站了? 我今天上午试做了,现在跟有需求但不会操作的朋友们分享一下: 我是在MarkDown编辑器上完成的,先打开MarkDown编辑器 ...

  4. 一键导出PDF文档中的高亮文字以及笔记(Python实现)

    需求 最近在阅读一些PDF格式的资料,经常会进行划线并做笔记,我希望这些内容在阅读结束之后能够方便地整理出来并回顾,于是探索了一下到处划线文字和笔记的方法. 首先,我去确认PDF阅读器是否提供了需要的 ...

  5. SimSwap 高保真人脸交换的高效框架 以及 deepfake辨别图片或者视频真假 dalle-mini文字生成图片

    1. SimSwap 高保真人脸交换的高效框架 简单交换(SimSwap),旨在实现广义和高保真人脸交换.与之前的方法要么缺乏泛化到任意身份的能力,要么无法保留面部表情和注视方向等属性,我们的框架能够 ...

  6. 隐藏链接和隐藏文字对seo的影响

    隐藏文字与隐藏链接也是我们常见的一种非不符合搜索引擎规则的行为,隐藏文字的话,就是说你的这个文字颜色与我们网页的背景颜色是相同的. 例如:白体白字.黑体黑字,这样的话我们是用肉眼看不见文字的,但是这个 ...

  7. python 终端输出高亮文字

    格式 \033[显示方式;前景色;背景色m +''+ \033[0m 高亮属于显示方式 显示方式 0 默认设置 1 高亮显示 4 使用下划线 5 闪烁 7 反白显示 8 不可见 示例: print(' ...

  8. element UI 封装后的table表头(tooltip)文字提示

    前提:table组件被封装了,且不想引入其他组件的情况下 截图: 实现: 代码: html: <el-table stripe :data="table.data" styl ...

  9. Android-滑动解锁高亮文字自定义TextView

    public class HightLightTextView extends TextView {// 存储view的宽度 private int mTextViewWidth = 0;// 画笔 ...

最新文章

  1. SSL剥离工具sslstrip
  2. 好久没写blog了。最近感觉自己老了
  3. elasticSearch6源码分析(6)http和transport模块
  4. 深度学习- Dropout 稀疏化原理解析
  5. 如何在用例之间传递值_接口测试:A12_HttpRunner_cookie整理_01_提取指定cookie值
  6. ICPC2019南昌区域赛
  7. java学习(70):GUL图形用户界面初识
  8. lightgbm过去版本安装包_Node版本管理利器-NVM,你们用过吗?
  9. 类似新浪微博和google图片的HTML5实现图片拖拽上传功能
  10. H5上传从微信保存的图片提示格式不对
  11. ios12xen html插件,iOS 12.4 越狱后实用插件推荐(二)
  12. 棒球游戏 android,真正的职业棒球比赛
  13. 使用FFmpeg合并多个MP4视频
  14. Qt 快速入门学习笔记
  15. 什 么 是 可 重 入 性 , 为 什 么 说 Synchronized 是 可 重 入 锁 ?
  16. FileNotFoundError: [Errno 2] No such file or directory: ‘ETHZ/eth01/images/image_00000001_2021-10-29
  17. 分子生物学总结完整版
  18. (keil4 51单片机)D:\uVision\C51\Inc\reg52.h(13): error C231: ‘P0‘: redefinition
  19. python女性素描_不给你的女朋友来张素描吗?使用python将图片转素描
  20. JVM之类加载机制(基于《深入理解Java虚拟机》之第七章类加载机制)(上)

热门文章

  1. matlab中定点数16位转为14位,如何使用python将浮点数转换为具有预定义位数的固定点...
  2. 【其他】学习通下载任务点里的PPT三步走
  3. 【ESP8266】安信可8266模组官方文档速查++
  4. 【C语言】删除元素(函数,数组的扫描)
  5. 线程间通讯《代码》pthread_cond_t
  6. sap未分摊差异怎么处理_物料主数据价格控制及差异问题
  7. android 读写文件 简书,Android10 文件操作适配
  8. 做arma模型步骤_互助问答第349期:关于ARMA预测模型的问题
  9. 【LeetCode】剑指 Offer 13. 机器人的运动范围
  10. Mysql之慢查询日志详解