Android中TextView自动识别url且实现点击跳转

 更新时间:2017年03月23日 08:23:51   作者:cj小牛  
这篇文章主要介绍了关于Android中TextView自动识别url且实现点击跳转的相关资料,文中给出了详细的示例代码,对大家具有一定的参考价值,需要的朋友们下面来一起看看吧。

前言

在项目中要在展示展示的文字中,自动匹配url 并且点击实现跳转,看了很多第三方的感觉都很复杂。后来自己写了一个简单的。

实现代码如下

1、创建一个继承UITextView的CjTextView 。

import <UIKit/UIKit.h>

@interface CjTextView : UITextView
@end

import "CjTextView.h"

@interface CjTextView ()
@property (nonatomic, copy ) NSString myText;
@property (nonatomic, assign) NSRange urlTange;
@property (nonatomic, copy ) NSString url;
@end

@implementation CjTextView
-(instancetype)initWithFrame:(CGRect)frame{
if (self = [super initWithFrame:frame]) {
}
return self;
}
// 重写了text的set 方法
-(void)setText:(NSString * )text{
self.myText = text;
[self.textStorage setAttributedString:[[NSAttributedString alloc]initWithString:text]];
NSRange range = NSMakeRange(0, self.myText.length);
[self.textStorage addAttribute:NSFontAttributeName value:[UIFont systemFontOfSize:20] range:range];
在这个方法中可以改变网址的颜色字体大小等属性。
[self doing];

}
-(void)layoutSubviews{
[super layoutSubviews];
self.textContainer.size = self.bounds.size;
}

-(void)touchesBegan:(NSSet<UITouch *> )touches withEvent:(UIEvent )event{
CGPoint point = [[touches anyObject] locationInView:self];
NSRange range =self.urlTange;
self.selectedRange = range;
NSArray array = [self selectionRectsForRange:self.selectedTextRange];
for (UITextSelectionRect obj in array) {
if (CGRectContainsPoint(obj.rect, point)) {
NSLog(@"你点击了网址%@",_url);
}
}
}

-(void) doing {
NSDataDetector * dataDetector = [NSDataDetector dataDetectorWithTypes:NSTextCheckingAllTypes error:nil];
NSArray res= [dataDetector matchesInString:self.textStorage.string options:NSMatchingReportProgress range:NSMakeRange(0, self.textStorage.string.length)];
for (NSTextCheckingResultresult in res) {
self.urlTange = result.range;
NSString str = [self.textStorage.string substringWithRange:result.range];
self.url = str;
NSMutableAttributedString *att= [[NSMutableAttributedString alloc]initWithString:str];
[att addAttribute:NSForegroundColorAttributeName value:[UIColor blueColor] range:NSMakeRange(0, str.length)];
[att addAttribute:NSFontAttributeName value:[UIFont systemFontOfSize:20] range:NSMakeRange(0, str.length)];
[self.textStorage replaceCharactersInRange:result.range withAttributedString:att];
}
}
@end

2、在控制器中实现

include "CjTextView.h"

@interface ViewController ()
@end
@implementation ViewController

(void)viewDidLoad {
[super viewDidLoad];
CjTextView *label = [[CjTextView alloc]init];

关掉弹出键盘

label.editable = NO;
label.text = @"123发送的股份大概放到放到地方多福多寿http://baidu.comuiiyiroiqiotioq" ;
label.backgroundColor = [UIColor yellowColor];
label.frame = CGRectMake(100, 100, 202, 200);;
[self.view addSubview: label];
}

就是这么简单的代码就实现了

总结

以上就是这篇文章的全部内容了,希望本文的内容对各位Android开发者们能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。

相关文章

  • Android自定义表格控件满足人们对视觉的需求

    Android自定义表格控件满足人们对视觉的需求

    随着人们对视觉的需求,基本组件已无法满足人们求新求异的要求,于是我们常常会自定义组件,用来实现更美观的UI界面,接下来将介绍Android如何自定义表格控件,感兴趣的朋友可以了解下,或许对你学习自定义控件有所帮助
    2013-02-02
  • Android自定义view仿淘宝快递物流信息时间轴

    Android自定义view仿淘宝快递物流信息时间轴

    这篇文章主要为大家详细介绍了Android自定义view仿淘宝快递物流信息时间轴,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-05-05
  • Android编程实现监控各个程序流量的方法

    Android编程实现监控各个程序流量的方法

    这篇文章主要介绍了Android编程实现监控各个程序流量的方法,涉及Android针对应用包的遍历,权限控制及相关属性操作技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-12-12
  • Android 判断某个服务(service)是否运行

    Android 判断某个服务(service)是否运行

    这篇文章主要介绍了 Android 判断某个服务(service)是否运行的相关资料,需要的朋友可以参考下
    2017-06-06
  • Android 模拟器(JAVA)与C++ socket 通讯 分享

    Android 模拟器(JAVA)与C++ socket 通讯 分享

    Android 模拟器(JAVA)与C++ socket 通讯 分享,需要的朋友可以参考一下
    2013-05-05
  • Android中GPS定位的用法实例

    Android中GPS定位的用法实例

    这篇文章主要介绍了Android中GPS定位的用法实例,是Android程序设计中比较经典的应用,需要的朋友可以参考下
    2014-09-09
  • 详解Activity之singletast启动模式及如何使用intent传值

    详解Activity之singletast启动模式及如何使用intent传值

    在一个新栈中创建该Activity实例,并让多个应用共享改栈中的该Activity实例。一旦改模式的Activity的实例存在于某个栈中,任何应用再激活改Activity时都会重用该栈中的实例,其效果相当于多个应用程序共享一个应用,不管谁激活该Activity都会进入同一个应用中
    2015-11-11
  • Android 简单封装获取验证码倒计时功能

    Android 简单封装获取验证码倒计时功能

    倒计时效果相信大家都不陌生,我们可以使用很多种方法去实现此效果,这里自己采用 CountDownTimer 定时器简单封装下此效果,方便我们随时调用。下面小编给大家分享android验证码倒计时封装方法,感兴趣的朋友一起看看吧
    2018-01-01
  • Android 三级NestedScroll嵌套滚动实践

    Android 三级NestedScroll嵌套滚动实践

    这篇文章主要介绍了Android 三级NestedScroll嵌套滚动实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-02-02
  • Android开发EditText实现密码显示隐藏

    Android开发EditText实现密码显示隐藏

    这篇文章主要为大家详细介绍了Android开发EditText实现密码显示隐藏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-08-08

最新评论