UILabel点击调用电话以及邮箱,UILabel超链接效果 NSMutableAttributedString文本样式设置
2017-10-23 15:56
477 查看
UILabel常用功能
首先感谢WYWebController的作者,感谢那些拥有共享精神的程序员,谢谢!!!
LinkLabel是我继承UILabel的.h
主要执行文件
具体使用代码如下
首先感谢WYWebController的作者,感谢那些拥有共享精神的程序员,谢谢!!!
LinkLabel是我继承UILabel的.h
#import <UIKit/UIKit.h> typedef enum{ TEL_TYPE, EMAIL_TYPE, LINK_TYPE }TextType; typedef void(^TapLinkBlack)(TextType type, NSString *text, NSURL *url); @interface LinkLabel : UILabel /** 设置显示内容 */ @property(nonatomic ,strong)NSString *title; /** 网址链接 */ @property(nonatomic ,strong)NSString *url; @property(nonatomic ,copy)TapLinkBlack linkBlack; /** 设置点击打开网页 @param title 显示标题 @param url 要打开的的链接 */ -(void)setUrlWithTitle:(NSString *)title url:(NSString *)url; @end
主要执行文件
#import "LinkLabel.h" //判断字符串是否为空 #define isNil(string) ([string isEqual:[NSNull null]] || string == nil || [string isEqualToString:@""] ||[string isEqualToString:@"<null>"] || [string isEqualToString:@"(null)"])?(YES):(NO) @interface LinkLabel() @end @implementation LinkLabel -(id)initWithFrame:(CGRect)frame { self = [super initWithFrame:frame]; if (self) { self.userInteractionEnabled = YES; [self addGestureRecognizer:[[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(topAction)]]; } return self; } /** 重写set方法 @param title 显示内容 */ -(void)setTitle:(NSString *)title { if (!isNil(title)) { _title = title; if ([self checkTelNumber:title]) { self.attributedText = [self setAttributedString:title]; }else if ([self validateEmail:title]){ self.attributedText = [self setAttributedString:title]; }else{ self.text = title; } } } /** 设置点击打开网页 @param title 显示标题 @param url 要打开的的链接 */ -(void)setUrlWithTitle:(NSString *)title url:(NSString *)url { if (!isNil(url)) { _url = url; if (!isNil(title)) { _title = title; self.attributedText = [self setAttributedString:_title]; } }else{ _url = @""; _title = title; self.text = title; } } /** 设置链接显示样式 @param title 显示内容 @return 返回链接样式文本 */ -(NSMutableAttributedString *)setAttributedString:(NSString *)title { NSRange range = NSMakeRange(0, title.length); NSMutableAttributedString *attribtStr = [[NSMutableAttributedString alloc]initWithString:title]; //设置下划线 [attribtStr addAttribute:NSUnderlineStyleAttributeName value:[NSNumber numberWithInteger:NSUnderlineStyleSingle] range:range]; //字体颜色 [attribtStr addAttribute:NSForegroundColorAttributeName value:[UIColor blueColor] range:range]; return attribtStr; } //手机号码验证 -(BOOL)checkTelNumber:(NSString *)telNumber { NSString *MOBILE = @"^1(3[0-9]|4[57]|5[0-35-9]|8[0-9]|7[06-8])\\d{8}$"; NSPredicate *regextestmobile = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", MOBILE]; return [regextestmobile evaluateWithObject:telNumber]; } //正则表达式判断邮箱 -(BOOL)validateEmail:(NSString *)email { NSString *emailRegex = @"[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}"; NSPredicate *emailTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", emailRegex]; return [emailTest evaluateWithObject:email]; } //验证URL -(BOOL)checkURL:(NSString*)url { NSString*pattern =@"http(s)?://([\\w-]+\\.)+[\\w-]+(/[\\w- ./?%&=]*)?"; NSPredicate*pred = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",pattern]; BOOL isMatch = [pred evaluateWithObject:url]; return isMatch; } //点击事件 -(void)topAction { if (!isNil(_url)) { if ([self checkURL:_url]) { NSURL *url = [NSURL URLWithString:_url]; if (_linkBlack) { _linkBlack(LINK_TYPE,_title,url); } } }else if (!isNil(_title)){ if ([self checkTelNumber:_title]) { NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"tel://%@",_title]]; if (_linkBlack) { _linkBlack(TEL_TYPE,_title,url); } }else if ([self validateEmail:_title]){ NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"mailto://%@",_title]]; if (_linkBlack) { _linkBlack(EMAIL_TYPE,_title,url); } } } }
具体使用代码如下
LinkLabel *titleLabel = [[LinkLabel alloc]initWithFrame: CGRectMake(0, 100, CGRectGetWidth(self.view.frame), 40)]; titleLabel.textAlignment = NSTextAlignmentCenter; titleLabel.title = @"这只是一个标题"; [self.view addSubview:titleLabel]; LinkLabel *linkLabel = [[LinkLabel alloc]initWithFrame:CGRectMake(0, 200, CGRectGetWidth(self.view.frame), 40)]; linkLabel.textAlignment = NSTextAlignmentCenter; [linkLabel setUrlWithTitle:@"百度一下" url:@"https://www.baidu.com"]; linkLabel.linkBlack = ^(TextType type, NSString *text, NSURL *url) { if (type == LINK_TYPE){ WYWebController *webVC = [[WYWebController alloc]init]; webVC.url = [NSString stringWithFormat:@"%@",url]; [self.navigationController pushViewController:webVC animated:YES]; } }; [self.view addSubview:linkLabel]; LinkLabel *telLabel = [[LinkLabel alloc]initWithFrame:CGRectMake(0, 300, CGRectGetWidth(self.view.frame), 40)]; telLabel.textAlignment = NSTextAlignmentCenter; telLabel.title = @"18612341234"; telLabel.linkBlack = ^(TextType type, NSString *text, NSURL *url) { if (type == TEL_TYPE) { NSLog(@"手机号:%@",text); //调用系统方法拨号 dispatch_async(dispatch_get_global_queue(0, 0), ^{ if (@available(iOS 10.0, *)) { [[UIApplication sharedApplication] openURL:url options:@{} completionHandler:nil]; } else { [[UIApplication sharedApplication] openURL:url]; } }); } }; [self.view addSubview:telLabel]; LinkLabel *emailLabel = [[LinkLabel alloc]initWithFrame: CGRectMake(0, 400, CGRectGetWidth(self.view.frame), 40)]; emailLabel.textAlignment = NSTextAlignmentCenter; emailLabel.title = @"18612341234@qq.com"; emailLabel.linkBlack = ^(TextType type, NSString *text, NSURL *url) { if (type == EMAIL_TYPE) { NSLog(@"手机号:%@",text); //调用系统方法拨号 dispatch_async(dispatch_get_global_queue(0, 0), ^{ if (@available(iOS 10.0, *)) { [[UIApplication sharedApplication] openURL:url options:@{} completionHandler:nil]; } else { [[UIApplication sharedApplication] openURL:url]; } }); } }; [self.view addSubview:emailLabel];
点击这里下载Demo
相关文章推荐
- Qt-Qlabel 自定义鼠标点击事件以及文本样式效果设计
- WPF按钮清空自带样式,以及透明按钮时,Grid的Background属性设置引起"点击"问题.
- vue2.0设置默认路由的代码,以及点击不同路由加上样式的api
- Qlabel 自定义鼠标点击事件以及文本样式效果设计
- NSMutableAttributedString文本样式设置以及富文本展示
- ios应用中调用系统电话、浏览器、地图、邮件等 以及打开其他应用(如qq,msn)
- CSS(四) 设置文本样式
- 设置树的打开关闭图标以及字体的大小颜色样式
- 正确的调用系统命令——为Process.waitFor设置超时以及其他
- css基础 设置div标签 宽度 边框线颜色样式 div中文本居中 div块在网页中居中 div中内容距边框线的距离
- MOSS2010的列表视图参数设置以及列表记录样式设置
- bootstrap table单元格样式,行样式以及分页显示全部的设置
- VIM 设置C++文本环境以及调式和编译
- iOS UILabel 中的文本设置固定宽度
- python 调用海康linux下demo的可执行程序,设置回调,实现人脸识别 以及实现抓拍功能
- css样式设置高度不定文本垂直居中
- Python 调用datetime或者time获取时间的时候以及时间转换,最好设置一下时区 否则会出现相差8个小时的情况
- 设置InputBox等提示框的字体以及样式
- 点击事件中实现弹出一个选择框(如选择网络设置、选择电话短信联系方式)
- ng4.0 使用[innerHTML]动态插入的富文本如何设置样式