iOS笔记--自定义带有placehold的TextView

我们知道UITextField的带有placehold,这十分方便,可以让我们知道这个地方要输入什么东西。但是TextView是没有placehold,那么该如何设置呢?我们可以自定义一个TextView,使得TextView也想TextField一样,带有placehold。

其实原理很简单,就是在textView上面加一个UILabel,在UILabel上显示placehold的文字。只要输入了文字就让UILabel的文字消失,如果没有文字,就让文字显示。

1、首先,创建一个继承自UITextView的类。取名叫PlaceholdTextView

在PlaceholdTextView.h中,定义一个字符串数据,用于传入placehold。

@property (nonatomic,strong)IBInspectable NSString *textViewPlacehold;

2、在.m中创建UILabel在TextView上,Label的frame可以自由改变,颜色200的灰色,接近于textField中placehold的颜色

self.delegate = self;

self.holdLabel = [[UILabel alloc]initWithFrame:CGRectMake(4, 0, 150, 30)];

self.holdLabel.font = self.font;

self.holdLabel.textColor = [UIColor colorWithRed:200/255.0 green:200/255.0 blue:205/255.0 alpha:1];

[self addSubview:self.holdLabel];

3、最重要的就是实现textView的代理方法,即textViewDidChange代理方法

- (void)textViewDidChange:(UITextView *)textView {

if (textView.text.length == 0) {

self.holdLabel.text = self.textViewPlacehold;

}else{

self.holdLabel.text = @"";

}

}

即,当textView上没有文字,就让UILabel显示文字,textView上有文字,UILabel就不显示文字。

4、开始的默认就执行以下代理方法,

- (void)drawRect:(CGRect)rect {

// Drawing code

[self textViewDidChange:self];

}

5、在需要的地方创建我们自定义的这个textView即可。可以用storyboard创建,也可以用代码创建。

代码创建:

PlaceholdTextView *placeTextView = [[PlaceholdTextView alloc] initWithFrame:CGRectMake(50, 300, 200, 100)];

//指定placehold

placeTextView.textViewPlacehold = @"请输入一些内容";

[self.view addSubview:placeTextView];

storyboard创建:

iOS笔记--自定义带有placehold的TextView_第1张图片

这样就可以了。

完整代码和注释详见下面的Demo。欢迎下载。

效果图:


iOS笔记--自定义带有placehold的TextView_第2张图片
此时的placehold是 “请输入一些内容”

Demo代码地址:https://github.com/312179361/PlaceholdTextView.git

联系方式:QQ:3020495503

有建议和意见的欢迎骚扰,共同交流。请备注,“我在上看到你的博客,一起交流吧”。

你可能感兴趣的:(iOS笔记--自定义带有placehold的TextView)