一、 UITextField的基本使用
- 设置光标颜色
// 设置光标颜色
self.tintColor=[UIColor whiteColor];
- 设置输入文字颜色
// 设置输入文字颜色
self.textColor=[UIColor whiteColor];
- 通过代理设置开始输入和结束输入时占位文字的颜色
一般情况下最好不要UITextView自己成为代理或者监听者
// 开始编辑
[self addTarget:self action:@selector(textDidBeginEdit)forControlEvents:UIControlEventEditingDidBegin];
// 结束编辑
[self addTarget:self action:@selector(textDidEndEdit)forControlEvents:UIControlEventEditingDidEnd];
二、UITextField占位文字颜色修改
1、通过设置attributedPlaceholder属性修改
- (void)setPlaceholderColor:(UIColor*)color {
NSMutableDictionary *attrDict = [NSMutableDictionary dictionary];
attrDict[NSForegroundColorAttributeName] = color;
NSAttributedString *attr= [[NSAttributedString alloc] initWithString:self.placeholder attributes:attrDict];
self.attributedPlaceholder = attr;
}
2、通过KVC拿到UITextView的占位label就可修改颜色
- (void)setPlaceholderLabelColor:(UIColor *)color {
UILabel*placeholderLabel = [self valueForKeyPath:@"placeholderLabel"];
placeholderLabel.textColo r= color;
}
3、通过Runtime来设置UITextView占位文字颜色
给UITextField添加一个占位文字颜色属性,而给系统类添加属性,就必须使用runtime来实现, 分类只能生成属性名
自定义setPlaceholder:并与系统setPlaceholder:方法交换
- 交换系统setPlaceholder:设置占位文字和自定义my_setPlaceholder:方法
- 交换原因:如果外界使用先设置了占位颜色,再设置占位文字,设置颜色时没有文字设置不成功
- 交换设置占位文字方法,外界调用系统方法设置占位文字时,会自动调用自定义的设置占位文字方法,再调用系统设置占位文字方法,在自定义设置占位文字方法中自动设置占位文字颜色
具体实现
1> 给UITextView添加一个分类, 声明一个placeholderColor属性
// .h文件
#import <UIKit/UIKit.h>
@interface UITextField (Placeholder)
@property UIColor *placeholderColor;
@end
2>.实现placeholderColor属性的setter和getter方法
// .m文件
#import "UITextField+Placeholder.h"
#import <objc/message.h>
NSString * const placeholderColorName = @"placeholderColor";
@implementation UITextField (Placeholder)
+ (void)load {
// 获取setPlaceholder
Method setPlaceholder = class_getInstanceMethod(self, @selector(setPlaceholder:));
// 获取ld_setPlaceholder
Method ld_setPlaceholder = class_getInstanceMethod(self, @selector(ld_setPlaceholder:));
// 交换方法
method_exchangeImplementations(setPlaceholder, ld_setPlaceholder);
}
// OC最喜欢懒加载,用的的时候才会去加载
// 需要给系统UITextField添加属性,只能使用runtime
- (void)setPlaceholderColor:(UIColor *)placeholderColor {
// 设置关联
objc_setAssociatedObject(self,(__bridge const void *)(placeholderColorName), placeholderColor, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
// 设置占位文字颜色
UILabel *placeholderLabel = [self valueForKeyPath:@"placeholderLabel"];
placeholderLabel.textColor = placeholderColor;
}
- (UIColor *)placeholderColor {
// 返回关联
return objc_getAssociatedObject(self, (__bridge const void *)(placeholderColorName));
}
// 设置占位文字,并且设置占位文字颜色
- (void)ld_setPlaceholder:(NSString *)placeholder {
// 1.设置占位文字
[self ld_setPlaceholder:placeholder];
// 2.设置占位文字颜色
self.placeholderColor = self.placeholderColor;
}
@end