Как создать подкласс UITextField и переопределить drawPlaceholderInRect для изменения цвета заполнителя - PullRequest
17 голосов
/ 27 мая 2011

У меня есть 3 UITextField с набором текста заполнителя. На одном из UITextField я хочу, чтобы текст заполнителя был красным.

Теперь, после поиска в Google, кажется, лучший способ сделать это - создать подкласс UITextField и переопределить drawPlaceholderInRect.

Как мне подклассифицировать и переопределить drawPlaceholderInRect? Я не нашел никаких примеров кода или учебных пособий по этому вопросу, и я новичок в Objective-C и разработке для iOS, поэтому мне было сложно разобраться с этим.

Ответ:

Создан новый класс target-c с именем CustomUITextFieldPlaceholder, который имеет подкласс UITextField. В CustomUITextFieldPlaceholder.m введите следующий код

 @implementation CustomUITextFieldPlaceholder

- (void)drawPlaceholderInRect:(CGRect)rect {
    // Set colour and font size of placeholder text
    [[UIColor redColor] setFill];
    [[self placeholder] drawInRect:rect withFont:[UIFont systemFontOfSize:12]];
}

@end

Для реализации вышеперечисленного в вашем проекте

#import "CustomUITextFieldPlaceholder.h"

и

IBOutlet CustomUITextFieldPlaceHolder *txtName;

Примечание. Это работает, и я считаю, что это правильная практика, однако я не полностью ее проверил. Надеюсь, этот пример поможет другим в моей ситуации.

Edit:

Изменено

[[UIColor redColor] setFill];

для

[[UIColor colorWithRed:255.0 green:0.0 blue:0.0 alpha:0.7] setFill];

Чтобы я мог установить непрозрачность 70%, чтобы имитировать заполнитель по умолчанию.

Ответы [ 3 ]

8 голосов
/ 27 мая 2011

Чтобы ответить на ваш конкретный вопрос, вот как работает подкласс:

// CustomTextField.h
@interface CustomTextField : UITextField {
}
@end

Вот как переопределить метод:

@implementation
- (CGRect)placeholderRectForBounds:(CGRect)bounds {
    return CGRectMake(x,y,width,height);
}
@end

Однако я не думаю, что это метод, который вы хотите переопределить. Я думаю, это то, что вы ищете:

@implementation
- (void)drawPlaceholderInRect:(CGRect)rect {
    // Your drawing code.
}
@end
0 голосов
/ 14 апреля 2013

Подклассы не изменят цвет.Я выдвинул здесь работу.

UITextField, заполнитель, цвет шрифта белый iOS 5?

0 голосов
/ 08 апреля 2013
[yourTextfield setValue:[UIColor colorWithRed:62.0/255.0f green:62.0/255.0f blue:62./255.0f alpha:1.0f]  forKeyPath:@"_placeholderLabel.textColor"];

Думаю, это будет полезно

...