您好,登錄后才能下訂單哦!
前言
在項目中要在展示展示的文字中,自動匹配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開發者們能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對億速云的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。