1、首先定义一个类UIPlaceHolderTextView继承UITextView.
头文件如下:
#import <UIKit/UIKit.h>
@interface UIPlaceHolderTextView : UITextView
@property (nonatomic,retain) NSString *placeHolder;
@property(nonatomic,retain) UIColor *placeHolderColor;
-(void)textChanged:(NSNotification *)notification;
@end
实现内容代码如下:
#import "UIPlaceHolderTextView.h"
@interface UIPlaceHolderTextView()
@property(nonatomic,retain) UILabel *placeHolderLabel;
@end
@implementation UIPlaceHolderTextView
-(void)dealloc{
[[NSNotificationCenter defaultCenter] removeObserver:self];
[_placeHolder release];
_placeHolder=nil;
[_placeHolderColor release];
_placeHolderColor=nil;
[_placeHolder release];
_placeHolder=nil;
[super dealloc];
}
-(void)awakeFromNib{
[super awakeFromNib];
if(!self.placeHolder){
[self setPlaceHolder:@""];
}
if(!self.placeHolderColor){
[self setPlaceHolderColor:[UIColor lightGrayColor]];
}
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textChanged:) name:UITextViewTextDidBeginEditingNotification object:nil];
}
-(void)textChanged:(NSNotification *)notification{
if([[self placeHolder] length]==0){
return;
}
if([[self text] length]==0){
[[self viewWithTag:1000] setAlpha:1];
}else{
[[self viewWithTag:1000] setAlpha:0];
}
}
-(void)setText:(NSString *)text{
[super setText:text];
[self textChanged:nil];
}
// Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
-(void)drawRect:(CGRect)rect
{
// Drawing code
if([[self placeHolder] length]>0){
if(_placeHolderLabel==nil){
_placeHolderLabel=[[UILabel alloc] initWithFrame:CGRectMake(8,8,self.bounds.size.width-16,0)];
_placeHolderLabel.lineBreakMode=NSLineBreakByCharWrapping;
_placeHolderLabel.numberOfLines=0;
_placeHolderLabel.font=self.font;
_placeHolderLabel.backgroundColor=[UIColor clearColor];
_placeHolderLabel.textColor=self.placeHolderColor;
_placeHolderLabel.alpha=0;
_placeHolderLabel.tag=1000;
[self addSubview:_placeHolderLabel];
}
_placeHolderLabel.text=self.placeHolder;
[_placeHolderLabel sizeToFit];
[self sendSubviewToBack:_placeHolderLabel];
}
if([[self text] length]==0&&[[self placeHolder] length]>0){
[[self viewWithTag:1000] setAlpha:1];
}
[super drawRect:rect];
}
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
// Initialization code
[self setPlaceHolderColor:[UIColor lightGrayColor]];
[self setPlaceHolder:@""];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textChanged:) name:UITextViewTextDidBeginEditingNotification object:nil];
}
return self;
}
@end
2.UIPlaceHolderTextView的调用
调用方法如下,首先在xib上面拖放一个UITextView,让它继承UIPlaceHolderTextView或者直接创建一个UIPlaceHolderTextView添加到xib上面,这里我们拖放一个UITextView让它继承UIPlaceHolderTextView,代码如下:#import <UIKit/UIKit.h>
#import "UIPlaceHolderTextView.h"
@interface LTViewController : UIViewController
@property(nonatomic,retain) IBOutlet UIPlaceHolderTextView *textview;//定义一个UIPlaceHolderTextView
@end
实现代码如下:
#import "LTViewController.h"
#import <QuartzCore/QuartzCore.h>
@interface LTViewController ()<UITextViewDelegate>
@end
@implementation LTViewController
@synthesize textview;
-(void)dealloc{
[textview release];
[super dealloc];
}
- (void)viewDidLoad
{
[super viewDidLoad];
//设置一下UITextView的样式,需用用的<QuartzCore/QuartzCore.h>
[textview.layer setBorderColor:[[[UIColor grayColor] colorWithAlphaComponent:0.5] CGColor]];
[textview.layer setBorderWidth:2.0];
textview.layer.cornerRadius=10;
textview.clipsToBounds=YES;
textview.delegate=self;
textview.placeHolder=@"请输入详细信息";//设置textview的placeHolder的显示内容
// Do any additional setup after loading the view, typically from a nib.
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end