美文网首页UI
关键字高亮到NSMutableAttributedString

关键字高亮到NSMutableAttributedString

作者: Karen_ | 来源:发表于2015-11-28 14:41 被阅读937次

    初学者一枚 皆为整理所得 如有错误请批评指正 共同学习 谢过

    关键字高亮

    原理:通过NSMutableAttributedString[带属性的可变字符串]改变与搜索内容相同的字体颜色。并且通过该类可灵活的改变字符串样式。
    ***参考:
    http://www.cnblogs.com/whyandinside/archive/2013/12/27/3493475.html
    http://www.tuicool.com/articles/zquENb

    *首先初始化带属性字符串,字典添加你所需要的颜色,通过range找到所对应的字符串进行更改。

     NSMutableAttributedString *attri = [[NSMutableAttributedString alloc]initWithString:@"今天周六了";
            [attri addAttribute:NSForegroundColorAttributeName value:GREEN range:[@"今天周六了"rangeOfString:@"周六"];
    

    通过关键字高亮回顾一下NSMutableAttributedString和NSAttributedString

    NSMutableAttributedString

    *NSAttributedString初始化方法:

    1. - initWithString: 字符串直接初始化
    NSMutableAttributedString *attrStr = [[NSMutableAttributedString alloc] initWithString:@"今天周六了"];
    

    2.initWithAttributedString: 自身对象初始化

    NSMutableAttributedString *attrStr = [[NSMutableAttributedString alloc] initWithString:@"今天周六了"];
    NSMutableAttributedString *attrAttr =[[NSMutableAttributedString alloc] initWithAttributedString:attrStr];
    

    3.initWithString: attributes: 字典初始化样式

    NSFontAttributeName 字体
    NSKernAttributeName 字间距[NSNumber]
    NSParagraphStyleAttributeName段落 [NSParagraphStyle ]
    NSBackgroundColorAttributeName 背景色
    NSForegroundColorAttributeName 字体色
    NSLigatureAttributeName 连字符[ NSNumber 0 表示没有连体字符 1 默认的连体字符 2表示使用所有连体符 默认值为 1]
    NSUnderlineStyleAttributeName下划线
    NSStrikethroughStyleAttributeName 删除线[不指定的情况下删除线颜色即为字体色]
    NSShadowAttributeName 阴影 [创建NSShadow设置其偏移量(CGSizeMake)颜色及模糊程度 要配合下面3个使用]

    NSObliquenessAttributeName 斜体
    NSExpansionAttributeName 扁平化
    NSVerticalGlyphFormAttributeName [整数0为横排文本 1为竖排文本]

    NSStrokeColorAttributeName 描边颜色 [同时设置描边属性 之前的字体色失效]
    NSStrokeWidthAttributeName 描边宽度 [小数默认为0为负数时改变描边和填充宽度 对于空心字 通常为3.0]

     UILabel *label = [[UILabel alloc]init];
        label.frame = CGRectMake(50, 100, 300, 222);
        [self.view addSubview:label];
        label.backgroundColor = [UIColor whiteColor];
        
        NSString *result = @"今天周六";
        NSString *keyWord = @"周六";
    
        
        //关键字添加效果
        NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc]initWithString:result];
        
        //获取关键字位置
        NSRange range = [result rangeOfString:keyWord];
    
        // 阴影
        NSShadow *shadow = [[NSShadow alloc] init];
        shadow.shadowBlurRadius = 1.0;// 模糊程度
        shadow.shadowColor = [UIColor grayColor];
        shadow.shadowOffset = CGSizeMake(1, 3);
        NSDictionary *dic = @{NSFontAttributeName:[UIFont systemFontOfSize:20],NSForegroundColorAttributeName:[UIColor blackColor],NSKernAttributeName:@2.0,NSStrikethroughStyleAttributeName:@(NSUnderlineStyleSingle),NSStrokeColorAttributeName:[UIColor blueColor],NSStrokeWidthAttributeName:@2.0,NSShadowAttributeName:shadow,NSVerticalGlyphFormAttributeName:@(0)};
    
        //设置关键字属性
        [attributedString setAttributes:dic range:range];
        
        //添加到label
        label.attributedText = attributedString;
    
    

    **并且可以为其添加手势
    接上↑

     //添加手势下一页
    UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(push)];
        
        label.userInteractionEnabled = YES;
        [label addGestureRecognizer:tap];
        
    -(void)push
    {
        SecondViewController *sv = [[SecondViewController alloc]init];
        [self.navigationController pushViewController:sv animated:YES];
    }
    
    

    对attributedString 进行改变
    开头调用
    [attributedString beginEditing];

    修改:

     [attributedString addAttribute:NSUnderlineStyleAttributeName value:[NSNumber numberWithInt:NSUnderlineStyleThick] range:NSMakeRange(0, 10)];  
     [attributedString addAttribute:NSBaselineOffsetAttributeName value:[NSNumber numberWithFloat:20.0] range:NSMakeRange(20, 100)]; 
    

    结尾调用
    [attributedString endEditing];
    我们可以通过字典修改其属性也可以通过Range修改部分文字的属性。
    这些方法可以在文字属性发生变化时发送消息给事件监听者。
    *如果要将NSMutableAttributedString对象赋值给NSAttributedString时,要使用copy方法:
    label.attributedText = [attributedString copy];

    以上属性在NSAttributedString和NSMutableAttributedString对象创建时可以设定,不同的是NSAttributedString对象在创建成功后其属性便不可改变,而NSMutableAttributedString的属性是可以改变的。

    相关文章

      网友评论

        本文标题:关键字高亮到NSMutableAttributedString

        本文链接:https://www.haomeiwen.com/subject/mjbdhttx.html