1.UITextView中添加placeholder
创建GCPlaceholderTextView类,如下所示,使用方法,创建公共方法
+(void)setTextViewByTextView:(GCPlaceholderTextView*)textView placeholder: (NSString*)placeholder{
textView.placeholderColor = [UIColor lightGrayColor];
textView.placeholder = NSLocalizedString(placeholder,);
}
在页面调用方法如下:
[Utils setTextViewByTextView:self.textView placeholder:@""];
GCPlaceholderTextView.h文件
#import <UIKit/UIKit.h>
@interface GCPlaceholderTextView : UITextView
@property(nonatomic, strong) NSString *placeholder;
@property (nonatomic, strong) UIColor *realTextColor UI_APPEARANCE_SELECTOR;
@property (nonatomic, strong) UIColor *placeholderColor UI_APPEARANCE_SELECTOR;
@end
GCPlaceholderTextView.m文件
#import "GCPlaceholderTextView.h"
@interface GCPlaceholderTextView ()
@property (unsafe_unretained, nonatomic, readonly) NSString* realText;
- (void) beginEditing:(NSNotification*) notification;
- (void) endEditing:(NSNotification*) notification;
@end
@implementation GCPlaceholderTextView
@synthesize realTextColor;
@synthesize placeholder;
@synthesize placeholderColor;
#pragma mark -
#pragma mark Initialisation
- (id) initWithFrame:(CGRect)frame {
if ((self = [super initWithFrame:frame])) {
[self awakeFromNib];
}
return self;
}
- (void)awakeFromNib {
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(beginEditing:) name:UITextViewTextDidBeginEditingNotification object:self];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(endEditing:) name:UITextViewTextDidEndEditingNotification object:self];
self.realTextColor = self.textColor;
self.placeholderColor = [UIColor lightGrayColor];
}
#pragma mark -
#pragma mark Setter/Getters
- (void) setPlaceholder:(NSString *)aPlaceholder {
if ([self.realText isEqualToString:placeholder] && ![self isFirstResponder]) {
self.text = aPlaceholder;
}
if (aPlaceholder != placeholder) {
placeholder = aPlaceholder;
}
[self endEditing:nil];
}
- (void)setPlaceholderColor:(UIColor *)aPlaceholderColor {
placeholderColor = aPlaceholderColor;
if ([super.text isEqualToString:self.placeholder]) {
self.textColor = self.placeholderColor;
}
}
- (NSString *) text {
NSString* text = [super text];
if ([text isEqualToString:self.placeholder]) return @"";
return text;
}
- (void) setText:(NSString *)text {
if (([text isEqualToString:@""] || text == nil) && ![self isFirstResponder]) {
super.text = self.placeholder;
}
else {
super.text = text;
}
if ([text isEqualToString:self.placeholder] || text == nil) {
self.textColor = self.placeholderColor;
}
else {
self.textColor = self.realTextColor;
}
}
- (NSString *) realText {
return [super text];
}
- (void) beginEditing:(NSNotification*) notification {
if ([self.realText isEqualToString:self.placeholder]) {
super.text = nil;
self.textColor = self.realTextColor;
}
}
- (void) endEditing:(NSNotification*) notification {
if ([self.realText isEqualToString:@""] || self.realText == nil) {
super.text = self.placeholder;
self.textColor = self.placeholderColor;
}
}
- (void) setTextColor:(UIColor *)textColor {
if ([self.realText isEqualToString:self.placeholder]) {
if ([textColor isEqual:self.placeholderColor]){
[super setTextColor:textColor];
} else {
self.realTextColor = textColor;
}
}
else {
self.realTextColor = textColor;
[super setTextColor:textColor];
}
}
#pragma mark -
#pragma mark Dealloc
- (void)dealloc {
[[NSNotificationCenter defaultCenter] removeObserver:self];
}
@end