iOS13 _placeholderLabel.textColor 접근오류
기존의 UITextField 의 Placeholder Color를 변경하려고 KVC 방식을 활용하여 사용하고 있었는데,
Xcode 11, iOS 13 빌드시 앱이 죽는 현상을 발견하였습니다.
(이번에 유독 이런 부분이 많아서 참 애플이 미워지고 있습니다.....)
기존 코드
[self.textFieldPassword setValue:[UIColor lightGrayColor] forKeyPath:@"_placeholderLabel.textColor"];
Extention을 활용하여 UITextField Placeholder Color를 변경하는 방법을 구현하였습니다.
변경 코드
[self.textFieldPassword setCommonPlaceholderColor:[UIColor lightGrayColor]];
내부 코드
import UIKit extension UITextField { /// UITextField Placeholder setColor (내부의 키값을 Class화 시켜서 작업함) /// - Parameter color: UIColor 값 @objc(setCommonPlaceholderColor:) // 함수인자가 존재시 objc 에서 인식못할때 이렇게 표현가능함. func setCommonPlaceholderColor(color:UIColor) { let ivar = class_getInstanceVariable(UITextField.self, "_placeholderLabel")! let placeholderLabel:UILabel = object_getIvar(self, ivar) as! UILabel placeholderLabel.textColor = color } }
이번에 느낌점인데, _placeholderLabel.textColor 와 같은 KVC 방식의 코드가 접근이 안되고 앱 크러쉬 나는 현상은 보통 Xcode Beta 때 많이 일어났지만, GM 혹은 정식버전때는 접근이 되지 않는 오류는 일어나지 않았었다. 왜? 이번에는 이렇게 수정된지는 모르겠지만, 이참에 Extension 을 활용하여 오류가 나면 그때 그때 바꿀 수 있게 일괄처리 하였습니다.
즐거운 코딩 되세요.
댓글
댓글 쓰기