[ios] iPhone UITextField-자리 표시 자 텍스트 색상 변경

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])
}