iOS 利用UITextView实现简单文字点击
2019-07-05 本文已影响1人
骑马纵天下
通过textView实现简单文字点击,实现方式很简单,通过textView可以响应识别URL来判断点击的文字。
@interface ViewController ()<UITextViewDelegate>
@property (nonatomic ,strong) HPResponseTextView *textView;
@property (nonatomic ,assign) NSString *content;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
_textView = [[HPResponseTextView alloc]initWithFrame:CGRectMake(0, 100, [UIScreen mainScreen].bounds.size.width, 300)];
// _textView.backgroundColor = [UIColor redColor];
_textView.textColor = [UIColor blackColor];
_textView.editable = NO;//必须禁止输入,否则点击将会弹出输入键盘
_textView.scrollEnabled = NO;//可选的,视具体情况而定
_textView.text = @"阅读APP规则请点击同意,否则不允许注册!你所说的一切都将会是呈堂证供。这是个很简单的文字点击事件,只能实现文字点击至于图文混排建议使用Core Text,功能更强大。很多第三方都实现了如YYText里面的YYLabel";
[self.view addSubview:_textView];
NSArray *tempArray = @[@"点击同意",@"允许注册",@"呈堂证供",@"YYText",@"YYLabel",@"第三方",@"图文混排",@"Core Text"];
[_textView responseTextWithClickStringArray:tempArray];
_textView.font = [UIFont systemFontOfSize:16];
_textView.textBlock = ^(NSString * _Nonnull text) {
NSString *tempStr = [NSString stringWithFormat:@"你点击了 %@",text];
UIAlertController *alc = [UIAlertController alertControllerWithTitle:@"" message:tempStr preferredStyle:UIAlertControllerStyleAlert];
UIAlertAction *cancel = [UIAlertAction actionWithTitle:@"确定" style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) {
}];
[alc addAction:cancel];
[self presentViewController:alc animated:YES completion:nil];
};
}
@end
.h
typedef void(^didTextBlock) (NSString *text);
@interface HPResponseTextView : UITextView <UITextViewDelegate>
@property (nonatomic ,copy) didTextBlock textBlock;
- (void)responseTextWithClickStringArray:(NSArray <NSString *>*)aStringArray;
@end
.m
@interface HPResponseTextView ()
@property (nonatomic ,strong) NSArray *stringArray;
@property (nonatomic ,strong) NSMutableArray *rangeMarray;
@end
@implementation HPResponseTextView
- (instancetype)initWithFrame:(CGRect)frame{
self = [super initWithFrame:frame];
if (self) {
self.delegate = self;
_rangeMarray = @[].mutableCopy;
}
return self;
}
- (void)responseTextWithClickStringArray:(NSArray<NSString *> *)aStringArray{
_stringArray = aStringArray;
self.textColor = [UIColor redColor];
NSMutableAttributedString *attributedStr = [[NSMutableAttributedString alloc]initWithString:self.text];
for (NSString *tempStr in aStringArray) {
NSRange tempRange = [self.text rangeOfString:tempStr];
[_rangeMarray addObject:NSStringFromRange(tempRange)];
[attributedStr addAttribute:NSLinkAttributeName value:tempStr range:tempRange];
[attributedStr addAttribute:NSFontAttributeName value: [UIFont systemFontOfSize:16] range:tempRange];
[attributedStr addAttribute:NSUnderlineStyleAttributeName value:[NSNumber numberWithInteger:NSUnderlineStyleSingle] range:tempRange];
}
self.attributedText = attributedStr;
}
- (BOOL)textView:(UITextView *)textView shouldInteractWithURL:(NSURL *)URL inRange:(NSRange)characterRange interaction:(UITextItemInteraction)interaction{
NSString *tempRangeStr = NSStringFromRange(characterRange);
if ([_rangeMarray containsObject:tempRangeStr]) {
NSString *selectStr = [self.text substringWithRange:characterRange];
NSLog(@"%@",selectStr);
if (self.textBlock) {
self.textBlock(selectStr);
}
}
return YES;
}
@end
效果
![](https://img.haomeiwen.com/i1483397/3c2d88d793993cb7.gif)