2015-06-08 3 views
4

IOS нуб здесьКак создать подчеркнутый UITextField

Когда я добавляю по умолчанию UITextField к ViewController, это выглядит следующим образом:

enter image description here

Мой дизайнер хотел бы я, чтобы сделать UITextField (т. е. фон прозрачный, и имеет только подчеркивание:

enter image description here

Как это сделать? Должен попросить моего дизайнера создать изображение в качестве фона для UITextField. Каким должен быть образ? Должно быть изображение = синий фон + подчеркивание (минус число, которое я думаю)

Это правильно?

UPDATE: на основе направления ниже (от @Ashish Kakkad), добавили этот код в Swift в ViewDidLoad:

var bottomLine = CALayer() 
    bottomLine.frame = CGRectMake(0.0, view.frame.height - 1, view.frame.width, 1.0) 
    bottomLine.backgroundColor = UIColor.whiteColor().CGColor 
    tf_editPassword.borderStyle = UITextBorderStyle.None 
    tf_editPassword.layer.addSublayer(bottomLine) 

Это почти работает, но проблема в том, что все боковые границы исчезают, I хочу только нижнюю строку, чтобы остаться.

ответ

2

@Ashish Kakkad опубликовал правильный код, но причина, по которой он не может работать для @ user1406716, заключается в том, что, когда в текстовом поле нет текста, высота и ширина кадра равны 0, поэтому, возможно, вы можете попробовать следующее:

Obj-C:

CALayer *bottomLine = [CALayer layer]; 
bottomLine.frame = CGRectMake(0.0f, 75 - 1, 300, 1.0f); 
bottomLine.backgroundColor = [UIColor whiteColor].CGColor; 
[myTextField setBorderStyle:UITextBorderStyleNone]; 
[myTextField.layer addSublayer:bottomLine]; 

Swift:

var bottomLine = CALayer() 
bottomLine.frame = CGRectMake(0.0, 75 - 1, 300, 1.0) 
bottomLine.backgroundColor = UIColor.whiteColor().CGColor 
myTextField.borderStyle = UITextBorderStyle.None 
myTextField.layer.addSublayer(bottomLine) 

Это будет гарантировать, что линия видна даже тогда, когда нет текст в текстовом поле.

8

Попробуйте этот код:

Obj-C

CALayer *bottomLine = [CALayer layer]; 
bottomLine.frame = CGRectMake(0.0f, self.frame.size.height - 1, self.frame.size.width, 1.0f); 
bottomLine.backgroundColor = [UIColor whiteColor].CGColor; 
[myTextField setBorderStyle:UITextBorderStyleNone]; 
[myTextField.layer addSublayer:bottomLine]; 

Swift

var bottomLine = CALayer() 
bottomLine.frame = CGRectMake(0.0, view.frame.height - 1, view.frame.width, 1.0) 
bottomLine.backgroundColor = UIColor.whiteColor().CGColor 
myTextField.borderStyle = UITextBorderStyle.None 
myTextField.layer.addSublayer(bottomLine) 

Надеется, что это помогает

Если вы используете автоматическую раскладку затем попытаться сделать этот код внутри метода viewDidLayoutSubviews.

+0

Эй, я попробовал ваш (конвертировано его Свифта, хотя - см обновленный вопрос). Это почти работает. Нет нижней линии, хотя, даже это исчезает. 'UITextBorderStyle.None' удаляет все границы, хотел бы сохранить нижнюю строку – user1406716

+0

@ user1406716 Oh! Я не знаю, как вы быстро работаете. Я проверю и дам вам знать. –

1

Чтобы обновить это с Swift 3:

let bottomLine = CALayer() 
bottomLine.frame = CGRect(origin: CGPoint(x: 0, y:first.frame.height - 1), size: CGSize(width: first.frame.width, height: 1)) 
bottomLine.backgroundColor = UIColor.white.cgColor 
first.borderStyle = UITextBorderStyle.none 
first.layer.addSublayer(bottomLine) 
Смежные вопросы