iOS中使用UITextView设置不同文本部分点击事件小结
最近在项目开发中遇到了
设置多行文本,点击蓝色邮箱部分跳转到发邮件页面功能。当然比较简单的方式是多标签单独设置,那样稍显麻烦。我们能不能用一个控件,给某一部分添加点击事件,结果是可以的,UITextView完美实现这个功能,代码如下。
1、添加UITextView的代理UITextViewDelegate
2、@property (nonatomic, strong) UITextView *textRemind;//设置UITextView属性变量
- (UITextView *)textRemind{
if (_textRemind == nil) {
_textRemind = [[UITextView alloc]init];
_textRemind.backgroundColor = [UIColor greenColor];
_textRemind.textColor=K_CC_COLOR_STRING(@"#999999");
//_textRemind.textAlignment = NSTextAlignmentRight;//此处没有效果,需要在属性里面单独设置
_textRemind.font = K_CC_FONT_SEMIBOLD(14);
}
return _textRemind;
}
//顶部菜单标题
NSString *firstStr=@"此功能暂时无法使用,请联系\n";
NSString *secondStr=@"guanshuai@cloudcc.com\n";
NSString *thirdStr=@"或\n";
NSString *fourthStr=@"rjr@cloudcc.com\n";
NSString *fifthStr=@"开通";
NSString *remindStr=[NSString stringWithFormat:@"%@%@%@%@%@",firstStr,secondStr,thirdStr,fourthStr,fifthStr];
NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString:remindStr];
//给需要点击的部分添加关键字
[attributedString addAttribute:NSLinkAttributeName
value:@"firstmanager"
range:[[attributedString string] rangeOfString:secondStr]];
[attributedString addAttribute:NSLinkAttributeName
value:@"secondmanager"
range:[[attributedString string] rangeOfString:fourthStr]];
//设置水平中间对齐
NSMutableParagraphStyle *paragrahStyle = [[NSMutableParagraphStyle alloc] init];
[paragrahStyle setAlignment:NSTextAlignmentCenter];
[attributedString addAttribute:NSParagraphStyleAttributeName value:paragrahStyle range:NSMakeRange(0, remindStr.length)];
self.textRemind.attributedText = attributedString;
//设置点击部分的文字颜色
self.textRemind.linkTextAttributes = @{NSForegroundColorAttributeName: K_CC_COLOR_STRING(@"#2D6CFC") };
self.textRemind.editable = NO; //必须禁止输入,否则点击将弹出输入键盘
self.textRemind.scrollEnabled = NO;
self.textRemind.selectable = NO;
self.textRemind.delegate = self;
UITapGestureRecognizer *tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(addGestureRecognizer:)];
[self.textRemind addGestureRecognizer:tapRecognizer];
[self.view addSubview:self.textRemind];
[self.textRemind mas_makeConstraints:^(MASConstraintMaker *make) {
make.center.equalTo(self.view);
make.height.mas_equalTo(100);
make.width.mas_equalTo(K_CC_SCREEN_WIDTH-32);
}];
3、添加手势处理
-(void)addGestureRecognizer:(UIGestureRecognizer*)gestureRecognizer{
if ([gestureRecognizer isKindOfClass:[UITapGestureRecognizer class]])
{
CGPoint tapLocation = [gestureRecognizer locationInView:self.textRemind];
UITextPosition *textPosition = [self.textRemind closestPositionToPoint:tapLocation];
NSDictionary *attributes = [self.textRemind textStylingAtPosition:textPosition inDirection:UITextStorageDirectionBackward];
NSURL *url = attributes[NSLinkAttributeName];
if(url) {
NSRange range = [self.textRemind.text rangeOfString:@"guanshuai@cloudcc.com\n"];
if (([url isKindOfClass:[NSString class]] && [(NSString *)url isEqualToString:@"firstmanager"])) {
range = [self.textRemind.text rangeOfString:@"guanshuai@cloudcc.com\n"];
} else if(([url isKindOfClass:[NSString class]] && [(NSString *)url isEqualToString:@"secondmanager"])){
range = [self.textRemind.text rangeOfString:@"rjr@cloudcc.com\n"];
}
[self textView:self.textRemind shouldInteractWithURL:url inRange:range];
}
}
}
- (BOOL)textView:(UITextView *)textView shouldInteractWithURL:(NSURL *)URL inRange:(NSRange)characterRange{
if ([(NSString *)URL isEqualToString:@"firstmanager"]) {
return NO;
} else if ([(NSString *)URL isEqualToString:@"secondmanager"]) {
return NO;
}
return YES;
}
iOS中使用UITextView设置不同文本部分点击事件小结的更多相关文章
- iOS全埋点解决方案-UITableView和UICollectionView点击事件
前言 在 $AppClick 事件采集中,还有两个比较特殊的控件: UITableView •UICollectionView 这两个控件的点击事件,一般指的是点击 UITableViewCell 和 ...
- 苹果手机IOS中div contenteditable=true 仿文本域无法输入编辑
问题: 在苹果手机IOS中 contenteditable="true" 做文本域输入,点击可以弹出键盘但是无法输入,安卓都正常. 经测试后,记得加一个样式 -webkit-use ...
- iOS中UITextField常用设置和方法
//初始化textField并设置位置及大小 UITextField *text = [[UITextField alloc]initWithFrame:CGRectMake(, , , )]; // ...
- 设置队列中文件上的“X”号的点击事件+uploadLimit动态加1
目的:1.设置文件队列中“x”号的点击事件 2.每次删除服务器文件后,把uploadLimit + 1: 'onUploadSuccess': function (file, data, respon ...
- YYLabel 自动布局 富文本文字点击事件
YYLabel显示多行除了需要设置numberOfLines = 0以外,还需要设置preferredMaxLayoutWidth最大的宽度值才可以生效多行效果 YYLabel中的NSMutableA ...
- clickableSpan实现textView文字部分点击有响应
先定义一个clickableSpan的子类 class MyClickText extends ClickableSpan{ private Context context; public MyCli ...
- iOS开发 解决UITapGestureRecognizer手势与UITableView的点击事件的冲突
该篇文章摘自我的新浪博客,原文地址为: http://blog.sina.com.cn/s/blog_dcc636350102wavx.html UITableView 拥有属于自己的点击事件,在将一 ...
- swiper在vue项目中的循环轮播bug以及点击事件
一般的,如果是静态数据(本地数据),可以直接在mounted生命周期中初始化,循环轮播.自动播放都比较正常. 但是,如果是动态从后台获取数据的话,采用上述方法会发现,轮播图无法自动播放,也无法拖拽. ...
- Winform中使用代码编写Button按钮的点击事件
场景 一般在进行Winform窗体开发时都会拖拽一个Button,然后双击进入Button按钮的点击事件中,进行 点击事件的编写. 如果窗体上事先没有Button按钮,是在代码中生成的Button按钮 ...
- ios中自定义cell 设置cell的分组结构
ios系统默认的cell并不能满足我们的需求 这个时候就需要自定义我们的cell 自定义cell为分组的时候 需要设置分组样式 以下是我常用分组的二种方法: 第一是 在自定义的UITableView ...
随机推荐
- 利用Curl命令来发邮件的小工具
一个利用curl来发送邮件的小工具 其实可以扩展出很多其它玩法 例如: 配合系统定时任务做系统状态监控,当满足一定条件自动发送邮件 或者和笔者一样,每次加班后懒得编辑邮件,就可以直接传入相应的参数来发 ...
- NVIDIA的ROS项目 —— Isaac ROS
文档地址: https://nvidia-isaac-ros.github.io/index.html Github地址: https://github.com/NVIDIA-ISAAC-ROS
- ( Ubuntu系统下 ) vim插件安装 supertab 实现tab键的补全功能 (vim+python环境下)
本文前提已经安装了 Vundle : 下载 supertab : git clone https://github.com/ervandew/supertab ~/.vim/bundle/ 编 ...
- 强化学习入门书籍《DeepReinforcementLearningHands-On-SecondEdition》
前段时间在网上买了本强化学习入门的书籍,即<Deep-Reinforcement-Learning-Hands-On>,虽然是影印版的,但是感觉还是可以看看的,说的也蛮易懂的,感觉比现在市 ...
- 【转载】 【报错】ImportError: cannot import name 'downsample' —— lasagne模块 调用 theano 报错
原网址: https://blog.csdn.net/kz_java/article/details/125030733 ======================================= ...
- 国产深度学习框架MindSpore的高校发展之旅——“样本点”计划
MindSpore这个框架我是使用时间比较早的了,因为这是华为的产品,而且正好是我所在的领域,再加上前些年华为的那些爱国宣传,我是大力支持这个软件的,而且是非常支持的那种.虽然之前就知道华为的这个软件 ...
- Windows系统下硬盘S.M.A.R.T硬盘检测工具——硬盘检测工具(CrystalDiskInfo)
CrystalDiskInfo是由日本人hiyohiyo个人开发的小工具,能全面详细直观的检查硬盘的健康状态及各种参数. 绿色版软件. 官方下载地址: https://crystalmark.info ...
- 突破单点瓶颈、挑战海量离线任务,Apache Dolphinscheduler在生鲜电商领域的落地实践
点亮 ️ Star · 照亮开源之路 GitHub:https://github.com/apache/dolphinscheduler 精彩回顾 近期,食行生鲜的数据平台工程师单葛尧在社区线上 ...
- cdq分治 提高篇
优化动态规划 序列 首先要会最长上升子序列的转移,这里就不说了. 我们 \(i\) 位置的初始值为 \(a_i\),可能变成的最大值为 \(mx_i\),可能变成的最小值为 \(mn_i\). 然后如 ...
- java本地增量打包工具
在打增量包每次都需要将class文件.jsp文件等拷贝到增量包中比较麻烦.所以就写了一个增量打包工具. 工作原理:根据文件的最后修改时间来打增量. 1.查找Java类增量:根据eclipse工程下的. ...