iPhone UITextField - Изменить цвет текста заполнителя - PullRequest
537 голосов
/ 27 августа 2009

Я хотел бы изменить цвет текста заполнителя, который я установил в моих UITextField элементах управления, чтобы сделать его черным.

Я бы предпочел сделать это без использования обычного текста в качестве заполнителя и необходимости переопределять все методы для имитации поведения заполнителя.

Я верю, если переопределю этот метод:

- (void)drawPlaceholderInRect:(CGRect)rect

тогда я смогу сделать это. Но я не уверен, как получить доступ к фактическому объекту-заполнителю из этого метода.

Ответы [ 31 ]

3 голосов
/ 23 мая 2012

Я новичок в xcode, и я нашел способ добиться того же эффекта.

Я поместил uilabel на место заполнителя с нужным форматом и скрыл его в

- (void)textFieldDidBeginEditing:(UITextField *)textField
{
    switch (textField.tag)
    {
        case 0:
            lblUserName.hidden=YES;
            break;

        case 1:
            lblPassword.hidden=YES;
            break;

        default:
            break;
    }
}

Я согласен, что это обходной путь, а не реальное решение, но эффект был таким же, как он получил по этой ссылке

ПРИМЕЧАНИЕ: Все еще работает на iOS 7: |

3 голосов
/ 10 октября 2018

Это решение для Swift 4.1

    textName.attributedPlaceholder = NSAttributedString(string: textName.placeholder!, attributes: [NSAttributedStringKey.foregroundColor : UIColor.red])
2 голосов
/ 01 января 2018

в быстром 3.X

textField.attributedPlaceholder = NSAttributedString(string: "placeholder text", attributes:[NSForegroundColorAttributeName: UIColor.black])

в срочном порядке 5

textField.attributedPlaceholder = NSAttributedString(string: "placeholder text", attributes: [NSAttributedString.Key.foregroundColor : UIColor.black])
2 голосов
/ 23 апреля 2014
[txt_field setValue:ColorFromHEX(@"#525252") forKeyPath:@"_placeholderLabel.textColor"];
2 голосов
/ 18 сентября 2013

Для тех, кто использует Monotouch (Xamarin.iOS), вот ответ Адама, переведенный на C #:

public class MyTextBox : UITextField
{
    public override void DrawPlaceholder(RectangleF rect)
    {
        UIColor.FromWhiteAlpha(0.5f, 1f).SetFill();
        new NSString(this.Placeholder).DrawString(rect, Font);
    }
}
2 голосов
/ 25 сентября 2013

Лучшее, что я могу сделать для iOS7 и меньше, это:

- (CGRect)placeholderRectForBounds:(CGRect)bounds {
  return [self textRectForBounds:bounds];
}

- (CGRect)editingRectForBounds:(CGRect)bounds {
  return [self textRectForBounds:bounds];
}

- (CGRect)textRectForBounds:(CGRect)bounds {
  CGRect rect = CGRectInset(bounds, 0, 6); //TODO: can be improved by comparing font size versus bounds.size.height
  return rect;
}

- (void)drawPlaceholderInRect:(CGRect)rect {
  UIColor *color =RGBColor(65, 65, 65);
  if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"7.0")) {
    [self.placeholder drawInRect:rect withAttributes:@{NSFontAttributeName:self.font, UITextAttributeTextColor:color}];
  } else {
    [color setFill];
    [self.placeholder drawInRect:rect withFont:self.font];
  }
}
1 голос
/ 10 июня 2013

Мне нужно было сохранить выравнивание заполнителей, чтобы ответа Адама мне было недостаточно.

Для решения этой проблемы я использовал небольшой вариант, который, надеюсь, поможет и некоторым из вас:

- (void) drawPlaceholderInRect:(CGRect)rect {
    //search field placeholder color
    UIColor* color = [UIColor whiteColor];

    [color setFill];
    [self.placeholder drawInRect:rect withFont:self.font lineBreakMode:UILineBreakModeTailTruncation alignment:self.textAlignment];
}
1 голос
/ 20 мая 2016

Для установленного заполнителя текстового поля атрибута с несколькими цветами,

Просто укажите текст,

  //txtServiceText is your Textfield
 _txtServiceText.placeholder=@"Badal/ Shah";
    NSMutableAttributedString *mutable = [[NSMutableAttributedString alloc] initWithString:_txtServiceText.placeholder];
     [mutable addAttribute: NSForegroundColorAttributeName value:[UIColor whiteColor] range:[_txtServiceText.placeholder rangeOfString:@"Badal/"]]; //Replace it with your first color Text
    [mutable addAttribute: NSForegroundColorAttributeName value:[UIColor orangeColor] range:[_txtServiceText.placeholder rangeOfString:@"Shah"]]; // Replace it with your secondcolor string.
    _txtServiceText.attributedPlaceholder=mutable;

Выход: -

enter image description here

0 голосов
/ 07 декабря 2017

In Swift 3

import UIKit

let TEXTFIELD_BLUE  = UIColor.blue
let TEXTFIELD_GRAY  = UIColor.gray

class DBTextField: UITextField {
    /// Tetxfield Placeholder Color
    @IBInspectable var palceHolderColor: UIColor = TEXTFIELD_GRAY
    func setupTextField () {
        self.attributedPlaceholder = NSAttributedString(string:self.placeholder != nil ? self.placeholder! : "",
                                                            attributes:[NSForegroundColorAttributeName: palceHolderColor])
    }
}

class DBLocalizedTextField : UITextField {
    override func awakeFromNib() {
        super.awakeFromNib()
        self.placeholder = self.placeholder
    }
}
0 голосов
/ 07 декабря 2010

Еще один вариант, который не требует подклассов - оставьте заполнитель пустым и поместите метку поверх кнопки редактирования. Управляйте меткой так же, как вы управляете местозаполнителем (очищая, когда пользователь вводит что-либо ..)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...