最近在项目开发中遇到了设置多行文本,点击蓝色邮箱部分跳转到发邮件页面功能。当然比较简单的方式是多标签单独设置,那样稍显麻烦。我们能不能用一个控件,给某一部分添加点击事件,结果是可以的,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设置不同文本部分点击事件小结的更多相关文章

  1. iOS全埋点解决方案-UITableView和UICollectionView点击事件

    前言 在 $AppClick 事件采集中,还有两个比较特殊的控件: UITableView •UICollectionView 这两个控件的点击事件,一般指的是点击 UITableViewCell 和 ...

  2. 苹果手机IOS中div contenteditable=true 仿文本域无法输入编辑

    问题: 在苹果手机IOS中 contenteditable="true" 做文本域输入,点击可以弹出键盘但是无法输入,安卓都正常. 经测试后,记得加一个样式 -webkit-use ...

  3. iOS中UITextField常用设置和方法

    //初始化textField并设置位置及大小 UITextField *text = [[UITextField alloc]initWithFrame:CGRectMake(, , , )]; // ...

  4. 设置队列中文件上的“X”号的点击事件+uploadLimit动态加1

    目的:1.设置文件队列中“x”号的点击事件 2.每次删除服务器文件后,把uploadLimit + 1: 'onUploadSuccess': function (file, data, respon ...

  5. YYLabel 自动布局 富文本文字点击事件

    YYLabel显示多行除了需要设置numberOfLines = 0以外,还需要设置preferredMaxLayoutWidth最大的宽度值才可以生效多行效果 YYLabel中的NSMutableA ...

  6. clickableSpan实现textView文字部分点击有响应

    先定义一个clickableSpan的子类 class MyClickText extends ClickableSpan{ private Context context; public MyCli ...

  7. iOS开发 解决UITapGestureRecognizer手势与UITableView的点击事件的冲突

    该篇文章摘自我的新浪博客,原文地址为: http://blog.sina.com.cn/s/blog_dcc636350102wavx.html UITableView 拥有属于自己的点击事件,在将一 ...

  8. swiper在vue项目中的循环轮播bug以及点击事件

    一般的,如果是静态数据(本地数据),可以直接在mounted生命周期中初始化,循环轮播.自动播放都比较正常. 但是,如果是动态从后台获取数据的话,采用上述方法会发现,轮播图无法自动播放,也无法拖拽. ...

  9. Winform中使用代码编写Button按钮的点击事件

    场景 一般在进行Winform窗体开发时都会拖拽一个Button,然后双击进入Button按钮的点击事件中,进行 点击事件的编写. 如果窗体上事先没有Button按钮,是在代码中生成的Button按钮 ...

  10. ios中自定义cell 设置cell的分组结构

    ios系统默认的cell并不能满足我们的需求 这个时候就需要自定义我们的cell 自定义cell为分组的时候 需要设置分组样式  以下是我常用分组的二种方法: 第一是 在自定义的UITableView ...

随机推荐

  1. SptingBoot同时接收文件和对象数据(接收表单数据)

    emmm...虽然很简单,而且网上全是教程,但是自己做个笔记映像才会更深刻,还请各位前辈多多指教: @RequestMapping(value = "/eventPush", me ...

  2. 【RabbitMQ】04 路由模式

    在订阅模式的基础上制定一些特定发送规则 创建路由模式的生产者: 注意这些变化,跟之前的订阅模式并不一样 package cn.dzz.routineQueueInProducer; import co ...

  3. 人形机器人专用操作系统 —— KaihongOS还是ROS

    机器人不是一个新词汇,机器人在人们生产生活中已经出现了几十年了,而最近最火的词汇是"智能机器人"或者是"人形机器人(humanoid)",而这二者之间的区别就是 ...

  4. (HASEE)神州笔记本 还原手册 —— 笔记本系统还原

    新买了一个笔记本,神州笔记本(HASEE),随机所带的手册,为防止丢失故把内容记录下来. 开机时按:CTRL + H 进入还原界面,点击"系统还原",点击"恢复出厂备份& ...

  5. (续)signal-slot:python版本的多进程通信的信号与槽机制(编程模式)的库(library) —— 强化学习ppo算法库sample-factory的多进程包装器,实现类似Qt的多进程编程模式(信号与槽机制) —— python3.12版本下成功通过测试

    前文: signal-slot:python版本的多进程通信的信号与槽机制(编程模式)的库(library) -- 强化学习ppo算法库sample-factory的多进程包装器,实现类似Qt的多进程 ...

  6. 制约国产深度学习框架发展的根本原因 —— AI芯片的无法自主生产或量产

    秉着没事就胡言乱语的宗旨,这里在接着胡说八道一下. 国外的深度学习框架如TensorFlow.pytorch.Jax打的如火如荼,按照以往惯例我们是不应该去做自主研发软件系统的,毕竟硬件不在掌握之下, ...

  7. 使用pycharm专业版(支持远程调试及运行)如何运行mpi的代码呢???(mpi4py的代码)

    问题如题: 请注意:这里pycharm专业版的远程调试及运行该如何设置不进行介绍. 由于mpi进程启动是需要执行mpiexec或mpirun命令的,然而在pycharm中我们只能远程调用Python命 ...

  8. 再用国产操作系统deepin出现拖影现象

    问题如题,使用deepin系统后发现不论是网页的拖动.滑动都会出现明显拖影现象,最神奇的是使用爱奇艺的客户端播放器时同样出现拖影现象. 不过这个拖影现象截图还体现不出来这个拖影的效果,估计只有录屏才可 ...

  9. 算法·理论:Manacher 笔记

    \(\text{Manacher}\) 来啦! \(\text{Manacher}\) 并没有什么前置知识,比 \(\text{KMP}\) 简单多了. 前置处理 \(\text{Manacher}\ ...

  10. QWen2-72B-Instruct模型安装部署过程

    最近在给我们的客户私有化部署我们的TorchV系统,客户给的资源足够充裕,借此机会记录下部署千问72B模型的过程,分享给大家! 一.基础信息 操作系统:Ubuntu 22.04.3 LTS GPU: ...