• iOS UI基础-17.0 UILable之NSMutableAttributedString


    在iOS开发中,常常会有一段文字显示不同的颜色和字体,或者给某几个文字加删除线或下划线的需求。之前在网上找了一些资料,有的是重绘UILabel的textLayer,有的是用html5实现的,都比较麻烦,而且很多UILabel的属性也不起作用了,效果都不理想。后来了解到NSMuttableAttstring(带属性的字符串),上面的一些需求都可以很简便的实现。

    NSMuttableAttstring 方法

    为某一范围内文字设置多个属性

    - (void)setAttributes:(NSDictionary *)attrs range:(NSRange)range;

    为某一范围内文字添加某个属性

    - (void)addAttribute:(NSString *)name value:(id)value range:(NSRange)range;

    为某一范围内文字添加多个属性

    - (void)addAttributes:(NSDictionary *)attrs range:(NSRange)range;

    移除某范围内的某个属性

    - (void)removeAttribute:(NSString *)name range:(NSRange)range;

    常见的属性及说明

    NSFontAttributeName  字体

    NSParagraphStyleAttributeName  段落格式 

    NSForegroundColorAttributeName  字体颜色

    NSBackgroundColorAttributeName   背景颜色

    NSStrikethroughStyleAttributeName 删除线格式

    NSUnderlineStyleAttributeName      下划线格式

    NSStrokeColorAttributeName        删除线颜色

    NSStrokeWidthAttributeName 删除线宽度

    NSShadowAttributeName  阴影

    例子一:

       UILabel *testLabel = [[UILabel alloc]initWithFrame:CGRectMake(0, 100, 320, 30)];
       testLabel.backgroundColor = [UIColor lightGrayColor];
    
       testLabel.textAlignment = NSTextAlignmentCenter;
    
       NSMutableAttributedString *AttributedStr = [[NSMutableAttributedString alloc]initWithString:@"今天天气不错呀"];
    
       [AttributedStr addAttribute:NSFontAttributeName
    
                             value:[UIFont systemFontOfSize:16.0]
    
                             range:NSMakeRange(2, 2)];
    
       [AttributedStr addAttribute:NSForegroundColorAttributeName
    
                             value:[UIColor redColor]
    
                             range:NSMakeRange(2, 2)];
    
       testLabel.attributedText = AttributedStr;
    
       [self.view addSubview:testLabel];

    效果:

    例子二:

            UILabel *titleView = [[UILabel alloc] init];
            titleView.width = 200;
            titleView.height = 100;
            titleView.textAlignment = NSTextAlignmentCenter;
            // 自动换行
            titleView.numberOfLines = 0;
            titleView.y = 50;
            
            NSString *str = [NSString stringWithFormat:@"%@
    %@", prefix, name];
            
            // 创建一个带有属性的字符串(比如颜色属性、字体属性等文字属性)
            NSMutableAttributedString *attrStr = [[NSMutableAttributedString alloc] initWithString:str];
            // 添加属性
            [attrStr addAttribute:NSFontAttributeName value:[UIFont boldSystemFontOfSize:16] range:[str rangeOfString:prefix]];
            [attrStr addAttribute:NSFontAttributeName value:[UIFont systemFontOfSize:12] range:[str rangeOfString:name]];
            titleView.attributedText = attrStr;

    例子二中,range:[str rangeOfString:name] 找到name 有str 所在的范围。

    删除:

        NSString *marketPrice = [NSString stringWithFormat:@"¥%d",4302];    
        NSMutableAttributedString *attrStr = [[NSMutableAttributedString alloc] initWithString:marketPrice];
        [attrStr addAttribute:NSStrikethroughStyleAttributeName value:@(NSUnderlinePatternSolid | NSUnderlineStyleSingle) range:NSMakeRange(0, marketPrice.length)];

    文字换行

            UILabel *tips = [[UILabel alloc]initWithFrame:CGRectMake(20, 16, kScreenWidth - 20, 45)];
            [tips setTextColor:[UIColor grayColor]];
            [tips setText:@"支付密码必须为6位数字组合。
    您可依次进入 '功能列表' -> '安全中心' 修改支付密码。"];
            [tips setFont:[UIFont boldSystemFontOfSize:12]];
            tips.textAlignment = NSTextAlignmentLeft;
            tips.numberOfLines = 0; // 关键一句

    参考博客:http://snowyshell.blog.163.com/blog/static/2209140342014475383375/

  • 相关阅读:
    关于向量叉积求得法向量方向判断
    Winform菜单之ContextMenuStrip
    Winform菜单之Menustrip
    MDI窗体及涉及到的相关问题
    Winform主窗体的设置
    Winform登录、控制软件只运行一次、回车登录
    MessageBox详解
    Winform窗体
    Winform创建解决方案
    Winform开发入门集中培训系列文章
  • 原文地址:https://www.cnblogs.com/jys509/p/5018027.html
Copyright © 2020-2023  润新知