欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

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

程序员文章站 2024-02-02 17:18:04
前言 在项目中要在展示展示的文字中,自动匹配url 并且点击实现跳转,看了很多第三方的感觉都很复杂。后来自己写了一个简单的。 实现代码如下 1、创建一个继承u...

前言

在项目中要在展示展示的文字中,自动匹配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开发者们能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对的支持。