본문 바로가기

iOS/Deep dive!!!

[iOS] UITextField placeholder 색 변경하는 방법

 
안녕하세요. 이번 포스트는 텍스트 필드를 커스텀 중에 placeholder 색을 변경하는 방법을 소개하려고 합니다.
 
 

 
"그룹 이름을 검색하세요." 이 부분이 텍스트 필드인데 오랜지로 깔 맞춤하면 좋을 것 같아서 UITextField의 속성을 찾아봤는데 String타입의 placeholder의 color 변경하는 속성은 없었습니다.
 

기존 코드,,

 

https://developer.apple.com/documentation/uikit/uitextfield/1619610-attributedplaceholder/

 
이럴 땐 attributedPlaceholder 속성을 사용하면 됩니다. 얘도 마찬가지로 텍스트필드에 text가 없을 때 attributed로 styled된 string이 텍스트 필드에 보여집니다. (= placeholder) 이를 사용하면 시스템에서 정의된 placeholder 색이 아닌 내가 원하는 방식으로 지정할 수 있습니다. (NSMutableAttributedString vs NSAttributedString 관련 포스트)
 

 
오호.. 
 
혹시 NSMutableAttributedString을 모르시는분들을 위해, 간단히 설명하자면
지정된 텍스트의 range에 따라서 다양한 속성을 설정할 수 있습니다. 어느 단어는 크게, 작게 등등 설정이 가능합니다.
그래서 comment에 대한 속성을 두 개 지정했습니다. 
 

let attributes: [NSAttributedString.Key: Any] = [
      .foregroundColor: Constant.TextField.placeholderColor,
      .font: UIFont.systemFont(ofSize: Constant.TextField.size)]

 
1. 딕셔너리 배열 형식으로 지정해야 합니다. ( 배열이기 때문에 특정 단어에 여러 개의 속성 추가가 가능합니다.) 첫 번째는 텍스트 컬러, 두 번째는 특정 폰트 사이즈 지정을 했습니다.
 
2. 지정된 속성을 NSAttributedString or NSMutableAttributedString의 attributes로 지정해야 합니다. 이때 addAttributes()함수가 사용되고, 특정 attributes에 대한 텍스트의 특정 위치에 한정될 경우 range를 지정하면 되는데 저는 comment 전체 적용하고 싶었습니다. NSRange를 commet 0부터 comment.count까지!! 이렇게 NSMutableAttributedString 만든 후 textfield의 attributedPlaceholder에 적용하면 됩니다.
 
 
 

 
아주 잘 되네요 :)
 

References:

https://stackoverflow.com/questions/1340224/iphone-uitextfield-change-placeholder-text-color