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开发者们能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对的支持。
推荐阅读
-
Android中TextView自动识别url且实现点击跳转
-
Android中TextView实现部分文字可点击跳转
-
Android中TextView实现部分文字可点击跳转
-
Android中TextView自动识别url且实现点击跳转
-
Android中实现为TextView添加多个可点击的文本
-
Android中如何实现TextView中某段文字超链接点击打开浏览器跳转到网页?
-
android TextView中识别多个url并分别点击跳转方法详解
-
Android中实现为TextView添加多个可点击的文本
-
android TextView中识别多个url并分别点击跳转方法详解
-
Android中如何实现TextView中某段文字超链接点击打开浏览器跳转到网页?