当前位置: 首页 > 编程笔记 >

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

吕宣
2023-03-14
本文向大家介绍Android中TextView自动识别url且实现点击跳转,包括了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实现可点击展开的TextView,包括了Android实现可点击展开的TextView的使用技巧和注意事项,需要的朋友参考一下 概述 Android开发过程中,经常遇到 Textview 展示不完全的情况。 遇到此情况,通常的处理是: 方案一 Textview 添加 android:ellipsize 属性,让展示不完的部分使用省略号代替。 方案二 Textview 采

  • 本文向大家介绍python3实现跳一跳点击跳跃,包括了python3实现跳一跳点击跳跃的使用技巧和注意事项,需要的朋友参考一下 借鉴了网上一些大神的代码和思路,这里整理一下写出点击跳跃玩跳一跳这个小游戏的思路 一、整体思路 棋子所在的坐标以及下一步所要到的坐标,根据两个坐标计算出两点之间距离进行跳跃。 二、分布思路 1、根据命令截图获取初始图保存到手机,然后上传到本地文件夹 2、将获取的截图放入新

  • 本文向大家介绍Android中实现为TextView添加多个可点击的文本,包括了Android中实现为TextView添加多个可点击的文本的使用技巧和注意事项,需要的朋友参考一下 本文实例展示了Android中实现为TextView添加多个可点击的文本的方法。该功能在Android社交软件的制作中非常具有实用价值。分享给大家供大家参考。具体如下: 很多时候我们在使用社交软件的过程中多多少少会为别人

  • 本文向大家介绍Android实现手势滑动识别功能,包括了Android实现手势滑动识别功能的使用技巧和注意事项,需要的朋友参考一下 对于Android中的手势识别可以从以下三个Listener入手——OnTouchListener、OnGestureListener、OnDoubleTapListener。这三个监听器分别是触摸监听、手势滑动监听和屏幕双击操作监听。很多的时候我们需要这些手势识别的

  • 本文向大家介绍JS实现点击下拉列表文本框中出现对应的网址,点击跳转按钮实现跳转,包括了JS实现点击下拉列表文本框中出现对应的网址,点击跳转按钮实现跳转的使用技巧和注意事项,需要的朋友参考一下 程序要求: 编写一个html文件的网页代码,页面包含一个下拉列表框、一个文本框和一个按钮,下拉列表框选择要去的网站,当选择完毕后文本框中出现对应的网址。点击确认跳转按钮后访问文本框中出现的网址。 实现效果:

  • 本文向大家介绍android实现App活动定时自动跳转效果,包括了android实现App活动定时自动跳转效果的使用技巧和注意事项,需要的朋友参考一下 App的小功能点,很简单几十行代码就可以实现 主页面代码 基本思路就是,通过一个计时线程来控制主线程(即UI线程)来更新UI 通过Handler来接受来自计时线程的Message 2.计时线程(内部类),设置每隔1秒睡一次,共3秒 3.最后别忘了在