Android中TextView自动识别url且实现点击跳转
前言
在项目中要在展示展示的文字中,自动匹配url并且点击实现跳转,看了很多第三方的感觉都很复杂。后来自己写了一个简单的。
实现代码如下
1、创建一个继承UITextView的CjTextView。
import@interfaceCjTextView:UITextView @end import"CjTextView.h" @interfaceCjTextView() @property(nonatomic,copy)NSStringmyText; @property(nonatomic,assign)NSRangeurlTange; @property(nonatomic,copy)NSStringurl; @end @implementationCjTextView -(instancetype)initWithFrame:(CGRect)frame{ if(self=[superinitWithFrame:frame]){ } returnself; } //重写了text的set方法 -(void)setText:(NSString*)text{ self.myText=text; [self.textStoragesetAttributedString:[[NSAttributedStringalloc]initWithString:text]]; NSRangerange=NSMakeRange(0,self.myText.length); [self.textStorageaddAttribute:NSFontAttributeNamevalue:[UIFontsystemFontOfSize:20]range:range]; 在这个方法中可以改变网址的颜色字体大小等属性。 [selfdoing]; } -(void)layoutSubviews{ [superlayoutSubviews]; self.textContainer.size=self.bounds.size; } -(void)touchesBegan:(NSSet )toucheswithEvent:(UIEvent)event{ CGPointpoint=[[touchesanyObject]locationInView:self]; NSRangerange=self.urlTange; self.selectedRange=range; NSArrayarray=[selfselectionRectsForRange:self.selectedTextRange]; for(UITextSelectionRectobjinarray){ if(CGRectContainsPoint(obj.rect,point)){ NSLog(@"你点击了网址%@",_url); } } } -(void)doing{ NSDataDetector*dataDetector=[NSDataDetectordataDetectorWithTypes:NSTextCheckingAllTypeserror:nil]; NSArrayres=[dataDetectormatchesInString:self.textStorage.stringoptions:NSMatchingReportProgressrange:NSMakeRange(0,self.textStorage.string.length)]; for(NSTextCheckingResultresultinres){ self.urlTange=result.range; NSStringstr=[self.textStorage.stringsubstringWithRange:result.range]; self.url=str; NSMutableAttributedString*att=[[NSMutableAttributedStringalloc]initWithString:str]; [attaddAttribute:NSForegroundColorAttributeNamevalue:[UIColorblueColor]range:NSMakeRange(0,str.length)]; [attaddAttribute:NSFontAttributeNamevalue:[UIFontsystemFontOfSize:20]range:NSMakeRange(0,str.length)]; [self.textStoragereplaceCharactersInRange:result.rangewithAttributedString:att]; } } @end
2、在控制器中实现
include"CjTextView.h" @interfaceViewController() @end @implementationViewController (void)viewDidLoad{ [superviewDidLoad]; CjTextView*label=[[CjTextViewalloc]init];
关掉弹出键盘
label.editable=NO; label.text=@"123发送的股份大概放到放到地方多福多寿http://baidu.comuiiyiroiqiotioq"; label.backgroundColor=[UIColoryellowColor]; label.frame=CGRectMake(100,100,202,200);; [self.viewaddSubview:label]; }
就是这么简单的代码就实现了
总结
以上就是这篇文章的全部内容了,希望本文的内容对各位Android开发者们能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对毛票票的支持。