关闭

iOS 自定义textField 显示下划线 左边显示文字 自定义placeholder的颜色和字体

标签: ios字体textField
1444人阅读 评论(0) 收藏 举报

本篇文章是记录下自己学习的内容 , 代码比较low,请各位大神多多指教


效果为


主要实现方法:

实现下划线。重写drawRect方法:

- (void)drawRect:(CGRect)rect

{

    CGContextRef context = UIGraphicsGetCurrentContext();


    [[UIColor redColor] set];//设置下划线颜色 这里是红色 可以自定义

    

    CGFloat y = CGRectGetHeight(self.frame);

    CGContextMoveToPoint(context, 0, y);

    CGContextAddLineToPoint(context, CGRectGetWidth(self.frame), y);

    //设置线的宽度

    CGContextSetLineWidth(context, 2);

    //渲染 显示到self

    CGContextStrokePath(context);

}


接下来自定义textField的leftView, 这里因为要显示文字,所以用一个label来实现, 也可以使用自定义的view

。在初始化的时候设置label为leftView, 并设置leftView的mode

- (instancetype)initWithFrame:(CGRect)frame

{

    if (self = [super initWithFrame:frame]) {

        UILabel *label = [[UILabel alloc] init];

        self.leftView = label;

        self.leftViewMode = UITextFieldViewModeAlways;

        _leftLabel = label;

    }

    return self;

}

_leftLabel是自己定义的一个全局变量, 这里可以看到leftLabel并没有frame

接下来重写textField的

- (CGRect)leftViewRectForBounds:(CGRect)bounds方法, 给leftView设置frame

- (CGRect)leftViewRectForBounds:(CGRect)bounds

{

    

    [super leftViewRectForBounds:bounds];

    CGRect frame = bounds;

    //这里设置为leftView的宽是textField的0.3倍,

    frame.size.width = bounds.size.width * 0.3;

    

    return frame;

}

然后在.h文件里面生成属性, 方便外界修改;

//左侧显示的文字

@property (nonatomic , copy) NSString *leftTitle;

//左侧文字的颜色

@property (nonatomic , strong) UIColor *leftTitleColor;

/**只有在设置了placeholder之后才会有效**/

@property (nonatomic , strong) UIColor *placeholderColor;


@property (nonatomic , strong) UIFont *placeholderFont;Font;

接下来重写属性的set方法


- (void)setPlaceholderColor:(UIColor *)placeholderColor

{

    NSMutableDictionary *dict = [NSMutableDictionary dictionary];

    dict[NSForegroundColorAttributeName] = placeholderColor;

    NSAttributedString *attribute = [[NSAttributedString alloc] initWithString:self.placeholder attributes:dict];

    [self setAttributedPlaceholder:attribute];

}

- (void)setPlaceholderFont:(UIFont *)placeholderFont

{

    NSMutableDictionary *dict = [NSMutableDictionary dictionary];

    dict[NSFontAttributeName] = placeholderFont;

    NSAttributedString *attribute = [[NSAttributedString alloc] initWithString:self.placeholder attributes:dict];

    [self setAttributedPlaceholder:attribute];

}

- (void)setLeftTitleColor:(UIColor *)leftTitleColor

{

    _leftTitleColor = leftTitleColor;

    [_leftLabel setTextColor:leftTitleColor];

}

- (void)setLeftTitle:(NSString *)leftTitle

{

    _leftTitle = leftTitle;

    [_leftLabel setText:leftTitle];

}

说明:之所以要在设置placeholder之后再设置placeholderColor和placeholderFont是因为我是用的是    [self setAttributedPlaceholder:attribute];来设置的, 这里是通过初始化self。placeholder来实现, 如果先设置placeholderColor,因为此时placeholder为空, 会设置失败, placeholderFont同上,


到这里就全部设置完毕了。。


0
0

猜你在找
【直播】机器学习&数据挖掘7周实训--韦玮
【套餐】系统集成项目管理工程师顺利通关--徐朋
【直播】3小时掌握Docker最佳实战-徐西宁
【套餐】机器学习系列套餐(算法+实战)--唐宇迪
【直播】计算机视觉原理及实战--屈教授
【套餐】微信订阅号+服务号Java版 v2.0--翟东平
【直播】机器学习之矩阵--黄博士
【套餐】微信订阅号+服务号Java版 v2.0--翟东平
【直播】机器学习之凸优化--马博士
【套餐】Javascript 设计模式实战--曾亮
查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:2941次
    • 积分:59
    • 等级:
    • 排名:千里之外
    • 原创:3篇
    • 转载:0篇
    • 译文:0篇
    • 评论:0条
    文章存档