UITextView 添加placeholder

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


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值