文档章节

自定义一个带下划线的UILable

zzyong_iOS
 zzyong_iOS
发布于 2016/03/03 20:40
字数 666
阅读 20
收藏 0

前言

    相信大家都见过一些购物app的折扣价会带有下划线,这个是怎么弄出来的呢?有的人可能会想到直接在上面加个宽度为1的view,但是这样做并不是一个好办法,你或许会添加N多这样的view,最好的方法就是自己自定义个带有下划线的UILable,这是一个简单的自定义控件,大神自行飘过,纯粹为了锻炼写作能力,不喜勿喷。谢谢!希望可以给读者一些自定义空间的启示, 此控件可以直接带走使用,水平有限,如果有什么错误,望指正。废话不说,直接写代码。

    首先先自定义一个继承于UILable的类UnderlineLable.h,里面包含三个属性,分别可以设置下划线的一些属性

//
//  UnderlineLable.h
//  huya_zzyong
//
//  Created by zzyong on 16/3/3.
//  Copyright © 2016年 zzyong. All rights reserved.
//
#import <UIKit/UIKit.h>

typedef enum {
    UnderlineTypeLine,
    UnderlineTypeX
} UnderlineType;

@interface UnderlineLable : UILabel

//下划线颜色
@property (nonatomic ,strong) UIColor *underlineColour;
//下划线宽度
@property (nonatomic ,assign) CGFloat underlineWidth;
//下划线的样式
@property (nonatomic ,assign) UnderlineType underlineType;

@end


接着就在- (void)drawRect:(CGRect)rect 方法进行画线,记住一定要调用父类的drawRect方法

//
//  UnderlineLable.m
//  huya_zzyong
//
//  Created by zzyong on 16/3/3.
//  Copyright © 2016年 zzyong. All rights reserved.
//
#import "UnderlineLable.h"
@interface UnderlineLable (){
    CGContextRef _context;
}
@end
@implementation UnderlineLable
- (void)setUnderlineColour:(UIColor *)underlineColour{
    _underlineColour = underlineColour;
    [self setNeedsDisplay];
}
- (void)setUnderlineWidth:(CGFloat)underlineWidth{
    _underlineWidth = underlineWidth;
    [self setNeedsDisplay];
}
- (void)setAttributedText:(NSAttributedString *)attributedText{
    [super setAttributedText:attributedText];
    [self setNeedsDisplay];
}
- (void)setText:(NSString *)text{
    [super setText:text];
    [self setNeedsDisplay];
}
- (void)setUnderlineType:(UnderlineType)underlineType{
    _underlineType = underlineType;
    [self setNeedsDisplay];
}
- (void)drawRect:(CGRect)rect{
    //记住调用父类的此方法,不然无法将无法显示文字
    [super drawRect:rect];
    
    // 创建图形上下文
    _context = UIGraphicsGetCurrentContext();
    
    // 开启图形上下文
    CGContextBeginPath(_context);
    
    // 设置下划线颜色
    CGContextSetStrokeColorWithColor(_context, _underlineColour ? _underlineColour.CGColor : [UIColor blackColor].CGColor);
    
    // 设置下划线的宽度
    CGContextSetLineWidth(_context, _underlineWidth ? _underlineWidth : 1);
    
    // 设置下划线的线型
    CGContextSetLineCap(_context, kCGLineCapRound);
    
    //设置下划线样式
    if (_underlineType) {//x线
        [self drawLineWithBeginPoint:CGPointMake(0, 0) endPoint:CGPointMake(rect.size.width, rect.size.height)];
        [self drawLineWithBeginPoint:CGPointMake(0, rect.size.height) endPoint:CGPointMake(rect.size.width, 0)];
    }else{//横线
        [self drawLineWithBeginPoint:CGPointMake(0, rect.size.height * 0.5) endPoint:CGPointMake(rect.size.width, rect.size.height * 0.5)];
    }
}
- (void)drawLineWithBeginPoint:(CGPoint )start endPoint:(CGPoint )end{
    // 设置起点
    CGContextMoveToPoint(_context, start.x,start.y);
    // 设置下一个连接点
    CGContextAddLineToPoint(_context, end.x, end.y);
    // 画图
    CGContextStrokePath(_context);
}
@end


至此就完成了带下划线的lable,看看效果

    UnderlineLable *lableView = [[UnderlineLable alloc] init];
    lableView.textAlignment = NSTextAlignmentCenter;
    lableView.frame = CGRectMake(100, 100, 100, 50);
    lableView.text = @"$1000 zzyong";
    lableView.textColor = [UIColor grayColor];
    lableView.underlineWidth = 1;
    lableView.underlineType = UnderlineTypeLine;
    [lableView sizeToFit];
    [self.view addSubview:lableView];
    
    UnderlineLable *lableView2 = [[UnderlineLable alloc] init];
    lableView2.textAlignment = NSTextAlignmentCenter;
    lableView2.frame = CGRectMake(100, 200, 100, 50);
    lableView2.text = @"$1000 zzyong";
    lableView2.textColor = [UIColor grayColor];
    lableView2.underlineColour = [UIColor redColor];
    lableView2.underlineWidth = 1;
    lableView2.underlineType = UnderlineTypeLine;
    [lableView2 sizeToFit];
    [self.view addSubview:lableView2];
    
    UnderlineLable *lableView1 = [[UnderlineLable alloc] init];
    lableView1.textAlignment = NSTextAlignmentCenter;
    lableView1.frame = CGRectMake(100, 300, 100, 50);
    lableView1.text = @"$1000 zzyong";
    lableView1.textColor = [UIColor grayColor];
    lableView1.underlineWidth = 1;
    lableView1.underlineType = UnderlineTypeX;
    [lableView1 sizeToFit];
    [self.view addSubview:lableView1];








© 著作权归作者所有

共有 人打赏支持
上一篇: iOS Block回调
下一篇: iOS Block回调
zzyong_iOS
粉丝 0
博文 2
码字总数 1554
作品 0
广州
私信 提问
nginx作json api反向代理,如何返回json形式的错误代码?(绝对有效)

首先,我先说下我使用的是lnmp一键安装中的nginx。 现在进入正题: 先 在http模块中的fastcgibusybuffers_size 128k下面加上 注意,这里不要忘记分号。这句话是一定要加上的。 然后 将serve...

Ai5tbb
2017/11/02
0
0
nginx自定义header头内容丢失

今天碰到,使用nginx做负载均衡,http header自定义的参数不转发的问题。 发现带下划线的的自定义参数,不能转发, soule下确实有这个情况:http://bbs.watchstor.com/thread-71311-1-1.htm...

greki
2012/10/19
0
1
自定义pageControl

第一次做这个简单的功能时,百度了一下网上大都是说重写setCurrentPage这个方法进行拦截,可是亲自试了一下好像并不能实现。现跟大家分享一个比较简单的自定义pageControl的方法。实现思想主...

如若初见
2016/03/21
33
0
解决nginx反向代理proxy不能转发header报头

使用nginx做负载均衡或http代理时,碰到http header不转发的问题。 配置里只有转发设置原始ip和host的 proxysetheader Host $host; proxysetheader X-Real-IP $remoteaddr; proxyset_header...

yanconggod
2017/11/20
0
0
渴切发布视差滚动解决方案"镨" pa.js

渴切开源发布视差滚动解决方案"镨" pa.js。代码简约,快速上手。pa.js 取自视差滚动(parallax scrolling)视差英文单词的前两个字母。是一款简约视差滚动js解决方案,采用了灵活的html属性来...

tyshymy
2013/10/07
3.7K
20

没有更多内容

加载失败,请刷新页面

加载更多

利用神器BTrace 追踪线上 Spring Boot应用运行时信息

概述 生产环境中的服务可能会出现各种问题,但总不能让服务下线来专门排查错误,这时候最好有一些手段来获取程序运行时信息,比如 接口方法参数/返回值、外部调用情况 以及 函数执行时间等信...

CodeSheep
40分钟前
3
0
OSChina 周四乱弹 —— 我想过年请假提前回家两天

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @clouddyy :#每日一歌# 分享王力宏的单曲《爱错》 《爱错》- 王力宏 手机党少年们想听歌,请使劲儿戳(这里) @Caremorele :这几天起床有点...

小小编辑
今天
59
5
Cookie 显示用户上次访问的时间

import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.Cookie;import javax.servlet.http.HttpServlet;import javax.serv......

gwl_
今天
1
0
网络编程

第14天 网络编程 今日内容介绍  网络通信协议  UDP通信  TCP通信 今日学习目标  能够辨别UDP和TCP协议特点  能够说出UDP协议下两个常用类名称  能够说出TCP协议下两个常用类名称...

stars永恒
今天
3
0
二进制相关

二进制 众所周知计算机使用的是二进制,数字的二进制是如何表示的呢? 实际就是逢二进一。比如 2 用二进制就是 10。那么根据此可以推算出 5的二进制等于 10*10+1 即为 101。 在计算机中,负数以...

NotFound403
昨天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部