在UITextField下放置一行的正确方法是什么

时间:2015-06-19 17:31:05

标签: ios objective-c underline

我想拥有一个无边框的UITextField,但下面有一条1或2像素的高引导线,用于强调该字段。为了清楚起见,我不希望UITextField中的文本加下划线,而是字段,无论是空的还是文本都是。

Google Material Design的这个例子中可以看到一个例子:

enter image description here

当然,我当然可以坚持使用一个显示纯色并适合该空间的UIImage,但这看起来并不优雅,是否有更好的方式更多&#34 ;正确"如果我担心我的代码将如何在几代iOS中运行以及谁知道哪些设备?

P.S。宁愿使用Obj-C从头开始,而不是找到一个库。

2 个答案:

答案 0 :(得分:3)

我实际上昨天刚刚做了这个...子类UITextField,这将有效。

注意:使用textFieldDidBeginEditing:和textFieldDidEndEditing:通过NSNotificationCenter或委托方法更改行高和颜色会更干净。

- (void)setup 
{
    self.hairlineLayer = [CALayer layer];
    self.hairlineLayer.backgroundColor = [UIColor materialTextDarkDividerColor].CGColor;
    [self.layer addSublayer:self.hairlineLayer];
}

- (void)layoutSubviews
{
    [super layoutSubviews];

    CGFloat hairlineHeight = 0;
    if (self.isFirstResponder) {
        self.hairlineLayer.backgroundColor = [UIColor redColor].CGColor;
        hairlineHeight = 1.4;
    } else {
        self.hairlineLayer.backgroundColor = [UIColor grayColor].CGColor;
        hairlineHeight = 1/[UIScreen mainScreen].scale;
    }

    self.hairlineLayer.frame = CGRectMake(0, CGRectGetHeight(self.bounds) - hairlineHeight, CGRectGetWidth(self.bounds), hairlineHeight);
}

答案 1 :(得分:1)

创建一个新的GlobalClass

在GlobalClass.h中声明一个方法

+(void)UnderLineStyleTextField:(UITextField *)textField;

在GlobalClass.m中定义一个方法

+(void)UnderLineStyleTextField:(UITextField *)textField
{
CALayer *textFieldbottomBorder = [CALayer layer];
textFieldbottomBorder.frame = CGRectMake(0.0f, textField.frame.size.height - 1, textField.frame.size.width, 1.0f);
textFieldbottomBorder.backgroundColor = [UIColor blackColor].CGColor;
[textField.layer addSublayer:textFieldbottomBorder];
}

在ViewController中导入GlobalClass

从ViewDidLoad调用GlobalClass方法

[GlobalClass UnderLineStyleTextField:txtForgotPasswods];