ios开发记录

简单实现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;
}

到此就实现了效果了

IMG_0792.PNG IMG_0793.PNG
上一篇下一篇

猜你喜欢

热点阅读