我经常写一些iOS开发的小技巧,为了在自己需要的时候能用得上,也希望能对正在看文章的你一些帮助,亦或是引发一些思考。
如果你觉得文章对你有帮助,请多多分享。你身边一定有很多做iOS开发的朋友,希望你能把我的iOS开发:iOSDevTip推荐给你的朋友。不甚感激!
我们都知道iOS开发中的UITextField
有个placeholder
属性,placeholder
可以很方便引导用户输入。但是UITextView
却没有placeholder
属性。
猥琐法分析
如何让UITextView
也有placeholder
功能呢?今天给各位分享一个比较猥琐的做法。思路大概是这样的:
- 把
UITextView
的text
当placeholder
使用。 - 在开始编辑的代理方法里清除
placeholder
。 - 在结束编辑的代理方法里在设置
placeholder
。
实现方法
创建UITextView
UITextView *textViewPlaceholder = [[UITextView alloc] initWithFrame:CGRectMake(20, 70, SCREEN.width - 40, 100)];
textViewPlaceholder.backgroundColor = [UIColor whiteColor];
textViewPlaceholder.text = @"关注微信公众号iOS开发:iOSDevTip";
textViewPlaceholder.textColor = [UIColor grayColor];
textViewPlaceholder.delegate = self;
[self.view addSubview:textViewPlaceholder];
初始化UITextView
,给UITextView
的text
赋值,并且给UITextView
的textColor
属性设置成灰色,让其看起来更像placeholder
。
别忘了设置UITextView
的代理,因为后面我们要用到UITextView
的两个代理方法。
开始编辑的代理方法
- (void)textViewDidBeginEditing:(UITextView *)textView {
if ([textView.text isEqualToString:@"关注微信公众号iOS开发:iOSDevTip"]) {
textView.text = @"";
textView.textColor = [UIColor blackColor];
}
}
在开始编辑的代理方法里面,判断如果是UITextView
的text
的值是placeholder
,那么,就清空text
,并且把textColor
设置成真正的内容颜色,假设是黑色。
结束编辑的代理方法
- (void)textViewDidEndEditing:(UITextView *)textView {
if (textView.text.length<1) {
textView.text = @"关注微信公众号iOS开发:iOSDevTip";
textView.textColor = [UIColor grayColor];
}
}
在结束编辑的代理方法里,判断如果UITextView
的text
值为空,那么,就要把需要设置的placeholder
赋值给UITextView
的text
,并且将textColor
属性设置成灰色。
添加轻击手势
UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapGesture:)];
tapGesture.numberOfTapsRequired = 1; //点击次数
tapGesture.numberOfTouchesRequired = 1; //点击手指数
[self.view addGestureRecognizer:tapGesture];
//轻击手势触发方法
-(void)tapGesture:(UITapGestureRecognizer *)sender
{
[self.view endEditing:YES];
}
至此,就很猥琐的实现了placeholder
功能。为了方便测试,我加了一个手势。作用是用键盘消失,这样可以测试结束编辑的时候placeholder
会不会显示。demo地址:Demo地址:iOSStrongDemo
添加手势的方法很简单,关于iOS开发中的手势汇总,你可以看这篇文章iOS开发之手势识别汇总。
我看了网上一些实现UITextView
的placeholder
功能的更猥琐的做法,在UITextView
上面盖一个UILabel
,然后在UITextView
的代理方法里控制UILabel
的值。还有用两个UITextView
实现的。
在这里,我只是抛砖引玉,如果你有更好的实现方法欢迎投稿给我:worldligang@163.com,下一篇文章,我将会封装一个带有placeholder
属性的UITextView
,敬请期待!
作者李刚是刚刚在线(www.superqq.com)站长,百度百家专栏作者
iOS工程师非著名自媒体,微信公众号iOS开发:iOSDevTip运营者