Things take time

[SWIFT] UITextField의 Under Line 추가하기(밑줄) 본문

iOS (기능)

[SWIFT] UITextField의 Under Line 추가하기(밑줄)

겸손할 겸 2017. 11. 9. 16:47

[원리]


텍스트 필드의 모양은 대부분 아래와 같다.



스타일의 경우 4개로 제공되긴하는데.. 그 것도 맘에 들지 않을때, 밑 줄을 긋고 싶을때! 아래와 같이



이런 경우엔 스토리보드의 메뉴로는 해결할 수 없다.


프로그래밍 상으로 접근해야한다.

textField.borderStyle = .none let border = CALayer() border?.frame = CGRect(x: 0, y: textfield.frame.size.height-1, width: textfield.frame.width, height: 1) border?.backgroundColor = UIColor.white.cgColor textfield.layer.addSublayer((border)!) textfield.textAlignment = .center textfield.textColor = UIColor.white

이처럼 하면 된다. 당연히 textFiled는 아울렛이든, 선언한 변수든 맞아야한다.

이처럼 하면 위의 결과처럼은 나오지만 문제가 발생한다.


무조건 발생하는건 아니지만, 바로 밑 줄이 제대로 안그어질때가 있다. 이것은 viewDidLoad같은데서 사용했을 경우 발생하므로.. 이 쪽에서 사용하지 말고

viewDidLayoutSubviews

이 함수를 오버라이딩하여 사용해야한다. 말 그대로 레이아웃에 걸린 addSubView같은(레이어도 뷰의 하위) 것들이 모두 완료 된 후 호출되기 때문이다.


또 중요한 것 하나,


이 함수는 한 번만 호출되는 것이 아니다. 화면이 변경되고, 뷰에 있는 것이 변경될 때마다 호출이 되기 때문에.. 입력할 때 마다 선이 생성된다고 이해하면 된다. 우연히 잘 맞으면 하나의 선으로 보이지만, 아닌 경우 선이 두 줄 이상으로 생성되기도 하기 때문이다.


이 때는 저 border란 변수를 옵셔널 + 전역 변수로 선언하여 nil 체크를 하여 없을 때만 생성되게 하면 된다.