美文网首页集思广益iOS BlogIos
UILabel添加删除线(全部方法详解,看这个就够了)

UILabel添加删除线(全部方法详解,看这个就够了)

作者: 蕾蕾是女神 | 来源:发表于2016-06-17 12:07 被阅读4004次

    在很多APP售卖的界面中经常看到有打折之前的价钱被添加了一条线条,本人在很多平台中找了方法,自己亲自码了几次,研究总结,分享这篇包括了所有方法,浅显易懂,和大家一起进步。(觉得有用就点击“喜欢”啦。)

    UILabel添加线条.png

    方法一:用RTLabel开源的富文本

      //首先创建一个Label
      label = [[UILabel alloc]initWithFrame:CGRectMake(130, 300, 180, 80)];
      label.font = [UIFont systemFontOfSize:35];
      label.backgroundColor = [UIColor yellowColor];
      [self.view addSubview:label];
      //设置显示的价格
      NSString *oldPrice = @"¥ 12345";
      //获取字符串的长度
      NSUInteger length = [oldPrice length];
    
      //从这里开始就是设置富文本的属性
      NSMutableAttributedString *attri = [[NSMutableAttributedString alloc] initWithString:oldPrice];
    
      //下面开始是设置线条的风格:
      //第一个参数addAttribute:是设置要中线(删除线)还是下划线。
      //NSStrikethroughStyleAttributeName:这种是从文本中间穿过,也就是删除线。
      //NSUnderlineStyleAttributeName:这种是下划线。
    
      //第二个参数value:是设置线条的风格:虚线,实现,点线......
      //第二参数需要同时设置Pattern和style才能让线条显示。
      
      //第三个参数range:是设置线条的长度,切记,不能超过字符串的长度,否则会报错。
      [attri addAttribute:NSStrikethroughStyleAttributeName value:@(NSUnderlinePatternSolid | NSUnderlineStyleSingle)  range:NSMakeRange(0, length)];
    
      //下列是设置线条的颜色
      //第一个参数就是选择设置中线的颜色还是下划线的颜色,如果上面选择的是中线,这里就要选择中线,否则颜色设置不上去。
      //第二个参数很简单,就是颜色而已。
      //第三个参数:同上。
      [attri addAttribute:NSStrikethroughColorAttributeName value:[UIColor redColor] range:NSMakeRange(0, length)];
      
      [label setAttributedText:attri];
    

    方法一总结:方法一是最常用的,最方便的一种。

    方法二:重写drawRect:(CGRect)rect方法

    说明:这种方法较复杂,逼格较高。再说明一下重绘,重绘操作是在在drawRect方法中完成,但是苹果不允许直接调用drawRect方法。苹果要求我们调用UIView类中的setNeedsDisplay方法,则程序会自动调用drawRect方法进行重绘。
    在UIView中,重写drawRect: (CGRect) aRect方法,可以自己定义想要画的图案.且此方法一般情况下只会画一次.也就是说这个drawRect方法一般情况下只会被调用一次.
    开始讲解:首先我们要创建一个继承UIView的子类:
    然后在这个子类里面重写drawRect:(CGRect)rect方法,上代码:
    #import "ViewSon.h"
    @implementation ViewSon
    - (void)drawRect:(CGRect)rect {
    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextSetFillColorWithColor(context, [UIColor grayColor].CGColor);
    CGContextFillRect(context, CGRectMake(0, CGRectGetHeight(self.frame) - 0.5, CGRectGetWidth(self.frame), 0.5));
    }
    @end

    再者,在一个界面中添加UILabel,导入那个子类的头文件添加这个子类。

     label = [[UILabel alloc]initWithFrame:CGRectMake(130, 300, 180, 80)];
     label.text = @"   ¥258";
     label.font = [UIFont systemFontOfSize:35];
     [self.view addSubview:label];
    
      ViewSon * viewson = [[ViewSon alloc]initWithFrame:CGRectMake(35,100, 65, 4)];
    viewson.backgroundColor = [UIColor redColor];
    [viewson setNeedsDisplay];//这句就是调用方法,程序会自动调用重写了得那个方法。
    [label addSubview:viewson];
    

    方法二的使用性很广泛,可不是单单的添加删除线和下划线,利用这种方法可以绘制出各种各样的图案。利用它添加删除线的时候,需要设置下划线添加在哪里,线条的长度也是随意的设置,并不一定需要和显示的字符串一样长。

    了解了方法二之后,自己就开始研究重绘到底是有多强大,等我研究出了结果,立马分享给大家。

    相关文章

      网友评论

      • __Feng:这个不是应该直接用富文本的吗?
      • Developer_Yancy:第二种方法有点画蛇添足,直接加个UIView在上面岂不是更快??
      • Weartist:又是这种标题..
      • af0810390095:看了下方法二并不是很好, 半夜看到,然后特意爬起来找我好久好久以前写的一个这个问题解决方式,并不需要添加独立的view ,只是一个划线 我的解决方法是封装个继承UILabel 的类,然后重写
        drawTextInRect(_:) 方法
        蕾蕾是女神: @小魂淡不喜欢冬天 那思想和原则是什么呢?
        af0810390095:@蕾蕾是女神 你的设计我觉得违反了一点软件设计原则和设计思想
        蕾蕾是女神: @小魂淡不喜欢冬天 今天我试下。我也觉得方法一是最好的,但是方法二的作用大得很。

      本文标题:UILabel添加删除线(全部方法详解,看这个就够了)

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