UITextField
컨트롤에 설정 한 자리 표시 자 텍스트의 색상을 변경하여 검은 색으로 만들고 싶습니다 .
자리 표시 자로 일반 텍스트를 사용하지 않고 자리 표시 자의 동작을 모방하기 위해 모든 방법을 재정의하지 않고이 작업을 선호합니다.
이 방법을 재정의하면 믿습니다.
- (void)drawPlaceholderInRect:(CGRect)rect
그런 다음이 작업을 수행 할 수 있어야합니다. 그러나이 방법 내에서 실제 자리 표시 자 객체에 액세스하는 방법을 잘 모르겠습니다.
답변
iOS 6의 UIView에 속성 문자열이 도입되었으므로 다음과 같이 플레이스 홀더 텍스트에 색상을 지정할 수 있습니다.
if ([textField respondsToSelector:@selector(setAttributedPlaceholder:)]) {
UIColor *color = [UIColor blackColor];
textField.attributedPlaceholder = [[NSAttributedString alloc] initWithString:placeholderText attributes:@{NSForegroundColorAttributeName: color}];
} else {
NSLog(@"Cannot set placeholder text's color, because deployment target is earlier than iOS 6.0");
// TODO: Add fall-back code to set placeholder color.
}
답변
쉽고 통증이 없으며 일부에게는 쉬운 대안이 될 수 있습니다.
_placeholderLabel.textColor
프로덕션 용으로 제안되지 않은 Apple은 제출을 거부 할 수 있습니다.
답변
drawPlaceholderInRect:(CGRect)rect
자리 표시 자 텍스트를 수동으로 렌더링하도록 재정의 할 수 있습니다 .
- (void) drawPlaceholderInRect:(CGRect)rect {
[[UIColor blueColor] setFill];
[[self placeholder] drawInRect:rect withFont:[UIFont systemFontOfSize:16]];
}
답변
아래 코드를 사용하여 자리 표시 자 텍스트 색상을 원하는 색상으로 변경할 수 있습니다.
UIColor *color = [UIColor lightTextColor];
YOURTEXTFIELD.attributedPlaceholder = [[NSAttributedString alloc] initWithString:@"PlaceHolder Text" attributes:@{NSForegroundColorAttributeName: color}];
답변
아마도 이런 식으로 시도하고 싶지만 Apple은 개인 ivar에 액세스하는 것에 대해 경고 할 수 있습니다
[self.myTextField setValue:[UIColor darkGrayColor]
forKeyPath:@"_placeholderLabel.textColor"];
참고
Martin Alléus에 따르면 iOS 7에서는 더 이상 작동하지 않습니다.
답변
이것은 스위프트 <3.0에서 작동합니다.
myTextField.attributedPlaceholder =
NSAttributedString(string: "placeholder text", attributes: [NSForegroundColorAttributeName : UIColor.redColor()])
iOS 8.2 및 iOS 8.3 베타 4에서 테스트되었습니다.
스위프트 3 :
myTextfield.attributedPlaceholder =
NSAttributedString(string: "placeholder text", attributes: [NSForegroundColorAttributeName : UIColor.red])
스위프트 4 :
myTextfield.attributedPlaceholder =
NSAttributedString(string: "placeholder text", attributes: [NSAttributedStringKey.foregroundColor: UIColor.red])
스위프트 4.2 :
myTextfield.attributedPlaceholder =
NSAttributedString(string: "placeholder text", attributes: [NSAttributedString.Key.foregroundColor: UIColor.red])
답변
스위프트에서 :
if let placeholder = yourTextField.placeholder {
yourTextField.attributedPlaceholder = NSAttributedString(string:placeholder,
attributes: [NSForegroundColorAttributeName: UIColor.blackColor()])
}
스위프트 4.0에서 :
if let placeholder = yourTextField.placeholder {
yourTextField.attributedPlaceholder = NSAttributedString(string:placeholder,
attributes: [NSAttributedStringKey.foregroundColor: UIColor.black])
}