Label 多字段添加点击 (YYKit)

2017-03-15  本文已影响220人  学而不思则罔思而不学则殆

目的

项目需求, 筛选之后选择了 YYKit , 其他的三方用起来不能精确的算出 Cell 的高度.


效果图

代码

NSString *string = @"我的世界,因为有你才会美, 因为你是我的世界";
NSRange range1 = [string rangeOfString:@"我的世界"];
NSRange range2 = [string rangeOfString:@"我的世界" options:NSBackwardsSearch];
NSLog(@"range1:%ld--%ld ----- range2:%ld--%ld", range1.location, range1.length, range2.location, range2.length);
//假数据
NSDictionary *dic1 = @{@"type":@"0",@"content":@"订单"};
NSDictionary *dic2 = @{@"type":@"3",@"content":@"测试跳转"};
NSDictionary *dic3 = @{@"type":@"0",@"content":@"还未反馈,广告主"};
NSDictionary *dic4 = @{@"type":@"8",@"content":@"差一点是帅哥"};
NSDictionary *dic5 = @{@"type":@"0",@"content":@"提醒你快去"};
NSDictionary *dic6 = @{@"type":@"9",@"content":@"反馈"};
NSDictionary *dic7 = @{@"type":@"0",@"content":@"哦!"};
NSMutableArray * array = [[NSMutableArray alloc]initWithObjects:dic1,dic2,dic3,dic4,dic5,dic6,dic7,nil];

// 拼接字符串
NSMutableArray *strArr =[NSMutableArray arrayWithCapacity:0];
for (NSDictionary *dicttion in array) {
    [strArr addObject:dicttion[@"content"]];
}
_pinChuan3 = [strArr componentsJoinedByString:@""];

//设置attributed
NSMutableAttributedString *text = [[NSMutableAttributedString alloc] initWithString:_pinChuan3];

text.font = [UIFont boldSystemFontOfSize:16.0f];

text.lineSpacing = 5;
__weak typeof(self) weakSelf = self;


__block NSString * content1;
[array enumerateObjectsWithOptions:NSEnumerationReverse usingBlock:^(id  _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
    
    NSDictionary * dict = obj;
    if ([dict[@"type"] integerValue] !=0) {
        content1 = dict[@"content"];
        NSLog(@"content---%@",content1);
        
        //           NSRange range = [_pinChuan3 rangeOfString:content1];
        NSRange range = [_pinChuan3 rangeOfString:content1 options:NSBackwardsSearch];
        
        NSLog(@"range--->%@",NSStringFromRange(range));
        [text setTextHighlightRange:range color:[UIColor redColor] backgroundColor:[UIColor clearColor] userInfo:nil tapAction:^(UIView * _Nonnull containerView, NSAttributedString * _Nonnull text, NSRange range, CGRect rect) {
            NSLog(@"点击");
            [weakSelf didSelectedDic:dict];
            
        } longPressAction:^(UIView * _Nonnull containerView, NSAttributedString * _Nonnull text, NSRange range, CGRect rect) {
            NSLog(@"长按");
            
        }];
    }
}];
//  Set to YYLabel or YYTextView.
YYLabel *label = [YYLabel new];
CGFloat Height  = [self getterSpaceLabelHeight:_pinChuan3 withLineSpacing:5 withFont:[UIFont systemFontOfSize:16.0f] withWidth:KScreenWidth - 40];
label.frame = CGRectMake(20, 300,KScreenWidth  - 40, Height);
label.attributedText = text;
label.numberOfLines = 0;
label.font = [UIFont systemFontOfSize:16.0f];
label.backgroundColor = [UIColor lightGrayColor];
[label sizeToFit];
[self.view addSubview:label];
- (CGFloat)getterSpaceLabelHeight:(NSString*)string withLineSpacing:(CGFloat)lineSpacing withFont:(UIFont*)font withWidth:(CGFloat)width{
    NSMutableParagraphStyle *paraStyle = [[NSMutableParagraphStyle alloc] init];
    paraStyle.lineBreakMode = NSLineBreakByCharWrapping;
    paraStyle.alignment = NSTextAlignmentLeft;
    paraStyle.lineSpacing = lineSpacing;
    paraStyle.hyphenationFactor = 1.0;
    paraStyle.firstLineHeadIndent = 0.0;
    paraStyle.paragraphSpacingBefore = 0.0;
    paraStyle.headIndent = 0;
    paraStyle.tailIndent = 0;
    NSDictionary *dic =@{NSFontAttributeName:font,NSParagraphStyleAttributeName:paraStyle,NSKernAttributeName:@1.0f
                         };
    
    CGSize size = [string boundingRectWithSize:CGSizeMake(width,MAXFLOAT) options:NSStringDrawingUsesLineFragmentOrigin attributes:dic context:nil].size;
    return size.height;
}
上一篇下一篇

猜你喜欢

热点阅读