我想拥有一个无边框的UITextField,但下面有一条1或2像素的高引导线,用于强调该字段。为了清楚起见,我不希望UITextField中的文本加下划线,而是字段,无论是空的还是文本都是。
Google Material Design的这个例子中可以看到一个例子:
当然,我当然可以坚持使用一个显示纯色并适合该空间的UIImage,但这看起来并不优雅,是否有更好的方式更多&#34 ;正确"如果我担心我的代码将如何在几代iOS中运行以及谁知道哪些设备?
P.S。宁愿使用Obj-C从头开始,而不是找到一个库。
答案 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];