简单实现UILabel之协议类点击事件
2019-02-21 本文已影响17人
selice
运用NSMutableAttributedString实现UILanel协议类点击事件
#import "ViewController.h"
#import "YJLAttributesLabel.h"
@interface ViewController ()
@end
@implementation ViewController
#pragma mark 多个点击位置进行简单设置
-(NSMutableAttributedString *)textArr:(NSMutableArray *)textarr AttributedString:(NSMutableAttributedString *)String Connet:(NSString *)connet{
for (int i=0; i<textarr.count; i++) {
NSRange range = [connet rangeOfString:textarr[I]];
[String addAttribute:NSLinkAttributeName
value:textarr[I]
range: range];
}
return String;
}
- (void)viewDidLoad {
[super viewDidLoad];
YJLAttributesLabel *attributesLabel = [[YJLAttributesLabel alloc]initWithFrame:CGRectMake(10, 200, [UIScreen mainScreen].bounds.size.width - 20, 100)];
NSString *temp = @"我已经阅读并同意注册协议隐私协议,一旦退役就不能再次进行参与该活动了啊注册政策";//全部显示的文字
NSMutableArray * arr_text = [[NSMutableArray alloc]initWithObjects:@"注册协议",@"隐私协议",@"注册政策", nil];//点击的文字设置
NSMutableArray * arr_range = [[NSMutableArray alloc]initWithObjects:@"8",@"12",@"35", nil];//点击的文字开始位置设置
NSMutableAttributedString *attrStr = [[NSMutableAttributedString alloc] initWithString:temp];
attrStr = [self textArr:arr_text AttributedString:attrStr Connet:temp];//点击的文字简单设置属性
[attrStr addAttribute:NSFontAttributeName
value:[UIFont systemFontOfSize:20]
range:NSMakeRange(0, attrStr.length)];
attributesLabel.YJLAttributesBlock = ^(NSString * _Nonnull clicktext) {//点击事件的d返回
UIAlertView *alertView = [[UIAlertView alloc]initWithTitle:@"提示" message:clicktext delegate:nil cancelButtonTitle:nil otherButtonTitles:@"我知道了", nil];
[alertView show];
};
[attributesLabel setAttributesText:attrStr actionText:arr_text actionRange:arr_range];//d添加到UILabel上面
[self.view addSubview:attributesLabel];
}
@end
YJLAttributesLabel 方法
YJLAttributesLabel.h
#import <UIKit/UIKit.h>
NS_ASSUME_NONNULL_BEGIN
@interface YJLAttributesLabel : UILabel
/**
@param text 传入富文本类型的字符串
@param actionText 要响应事件的字符串
*/
- (void)setAttributesText: (NSMutableAttributedString *)text
actionText: (NSMutableArray *)actionText
actionRange:(NSMutableArray *)actionrange;
/**
点击事件回调
*/
@property (nonatomic , copy) void(^YJLAttributesBlock)(NSString *clicktext);
@end
NS_ASSUME_NONNULL_END
YJLAttributesLabel.m
#import "YJLAttributesLabel.h"
@interface YJLTextView : UITextView
@end
@implementation YJLTextView
- (BOOL)canPerformAction:(SEL)action withSender:(id)sender
{
// 返回NO为禁用,YES为开启
// 粘贴
if (action == @selector(paste:)) return NO;
// 剪切
if (action == @selector(cut:)) return NO;
// 复制
if (action == @selector(copy:)) return NO;
// 选择
if (action == @selector(select:)) return NO;
// 选中全部
if (action == @selector(selectAll:)) return NO;
// 删除
if (action == @selector(delete:)) return NO;
// 分享
if (action == @selector(share)) return NO;
return [super canPerformAction:action withSender:sender];
}
- (BOOL)canBecomeFirstResponder {
return NO;
}
@end
@interface YJLAttributesLabel()<UITextViewDelegate>
@property (nonatomic , strong) YJLTextView *textView ;
@property (nonatomic , strong) NSMutableArray *actionText ;
@property (nonatomic , strong) NSMutableArray *actionRange ;
@end
@implementation YJLAttributesLabel
- (void)setAttributesText: (NSMutableAttributedString *)text actionText: (NSMutableArray *)actionText actionRange:(NSMutableArray *)actionrange{
self.textView.attributedText = text;
self.actionText = actionText;
self.actionRange = actionrange;
}
- (BOOL)textView:(UITextView *)textView shouldInteractWithURL:(NSURL *)URL inRange:(NSRange)characterRange interaction:(UITextItemInteraction)interaction {
if ([self.actionRange containsObject:[NSString stringWithFormat:@"%ld",characterRange.location]]) {
NSLog(@"%ld",characterRange.location);
NSInteger index = [self.actionRange indexOfObject:[NSString stringWithFormat:@"%ld",characterRange.location]];
self.YJLAttributesBlock(self.actionText[index]);
return NO;
}
return YES;
}
- (instancetype)init {
if (self == [super init]) {
[self setupUI];
[self configuration];
}
return self;
}
- (instancetype)initWithFrame:(CGRect)frame {
if (self == [super initWithFrame:frame]) {
[self setupUI];
[self configuration];
}
return self;
}
- (void)configuration {
self.userInteractionEnabled = YES;
}
- (void)setupUI {
[self addSubview:self.textView];
}
- (void)layoutSubviews {
self.textView.frame = self.bounds;
}
- (YJLTextView *)textView {
if (_textView == nil) {
_textView = [[YJLTextView alloc]init];
_textView.backgroundColor = self.backgroundColor;
_textView.textColor = self.textColor;
self.textColor = [UIColor clearColor];
_textView.font = self.font;
_textView.scrollEnabled = NO;
_textView.text = self.text;
_textView.delegate = self;
_textView.editable = NO;
_textView.textAlignment = self.textAlignment;
_textView.linkTextAttributes = @{NSForegroundColorAttributeName:[UIColor redColor]};
}
return _textView;
}