iOS13 _placeholderLabel.textColor 접근오류

  iOS13 _placeholderLabel.textColor 접근오류


기존의 UITextFieldPlaceholder 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 을 활용하여 오류가 나면 그때 그때 바꿀 수 있게 일괄처리 하였습니다.

즐거운 코딩 되세요.

댓글