如何将UITextField子类化并覆盖drawPlaceholderInRect以更改占位符颜色

时间:2011-05-27 11:17:37

标签: iphone objective-c ios uitextfield subclass

我有一个带有占位符文本集的3 UITextField。在其中一个UITextField我希望占位符文本为红色。

现在谷歌搜索后,似乎最好的方法是继承UITextField并覆盖drawPlaceholderInRect

如何进行子类化和覆盖drawPlaceholderInRect?我没有找到任何代码示例或教程,我是Objective-c和iOS开发的新手,所以发现它很难解决。

答案:

创建了一个名为CustomUITextFieldPlaceholder的新Objective-c类,其子类为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;

注意:这有效,我相信是正确的做法,但我还没有完全测试过。希望这个例子在我的情况下帮助其他人。

修改

更改

[[UIColor redColor] setFill];

代表

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

这样我就可以将不透明度设置为70%来模仿默认占位符。

3 个答案:

答案 0 :(得分:8)

为了回答您的具体问题,这就是子类化的工作原理:

// 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

答案 1 :(得分:0)

[yourTextfield setValue:[UIColor colorWithRed:62.0/255.0f green:62.0/255.0f blue:62./255.0f alpha:1.0f]  forKeyPath:@"_placeholderLabel.textColor"];

我想这会有所帮助

答案 2 :(得分:0)

子类化不会改变颜色。我在这里提出了一项工作。

UITextField placeholder font color white iOS 5?