大家都知道UITextField才有placeholder属性,UITextView 并没有placeholder,那么怎么模拟UITextfield使UITextView也有placeholder。
思路是:继承uitextview,判断当text为空时就让[super text]显示placeholder。
代码如下(我引用了arc):
UIPlaceholderTextView.h
#import <UIKit/UIKit.h>
@interface UIPlaceholderTextView : UITextView
@property(nonatomic, strong) NSString *placeholder; //占位符
-(void)addObserver;//添加通知
-(void)removeobserver;//移除通知
@end
UIPlaceholderTextView.m
#import "UIPlaceholderTextView.h"
@interface UIPlaceholderTextView ()
@property (nonatomic, strong) UIColor* textColor;
- (void) beginEditing:(NSNotification*) notification;
- (void) endEditing:(NSNotification*) notification;
@end
@implementation UIPlaceholderTextView
@synthesize placeholder;
@synthesize textColor;
- (id) initWithFrame:(CGRect)frame {
if ((self = [super initWithFrame:frame])) {
[self awakeFromNib];
}
return self;
}
//当用nib创建时会调用此方法
- (void)awakeFromNib {
textColor = [UIColor redColor];
[self addObserver];
}
-(void)addObserver
{
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(beginEditing:) name:UITextViewTextDidBeginEditingNotification object:self];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(endEditing:) name:UITextViewTextDidEndEditingNotification object:self];
}
-(void)removeobserver
{
[[NSNotificationCenter defaultCenter] removeObserver:self];
}
#pragma mark -
#pragma mark Setter/Getters
- (void) setPlaceholder:(NSString *)aPlaceholder {
placeholder = aPlaceholder;
[self endEditing:nil];
}
- (NSString *) text {
NSString* text = [super text];
if ([text isEqualToString:placeholder]) return @"";
return text;
}
- (void) beginEditing:(NSNotification*) notification {
if ([super.text isEqualToString:placeholder]) {
super.text = nil;
//字体颜色
[super setTextColor:textColor];
}
}
- (void) endEditing:(NSNotification*) notification {
if ([super.text isEqualToString:@""] || self.text == nil) {
super.text = placeholder;
//注释颜色
[super setTextColor:[UIColor lightGrayColor]];
}
}
在ViewController中用时,1、在xib上加一个uitextview连接上,2、直接创建initframe
但是不要忘了,placeholder,和添加通知,移除通知。
- (void)viewDidLoad
{
[super viewDidLoad];
self.textView.placeholder = @"请添写你的信息……";
// Do any additional setup after loading the view, typically from a nib.
}
-(void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:YES];
[self.textView addObserver];
}
-(void)viewDidDisappear:(BOOL)animated
{
[super viewDidDisappear:YES];
[self.textView removeobserver];
}

效果图:
欢迎大家,有更好的方法提出!