设置textView的placeholder

首先看产品需求

设置textView的placeholder_第1张图片

我之前的做法是 ,给textView设置初始的文字,然后进行下面的判断,当为“请输入内容”的时候,textview.text都设为空,这样做很不合理(错误的做法

<del>- (void)textViewDidBeginEditing:(UITextView *)textView
{
    
  if ([textView.text isEqualToString:@"请输入内容..."]) {
        [textView setText:@""];
    
    }
          
}</del>

下面的方法是正确的方法

设置textView的placeholder_第2张图片

如图,给textview上面加一个label《其实加一个textview更好》,然后进行设置

遇到的问题:1、刚开始我想的是如果加入一个label或者textview,那么“输入内容”那一块就不能点击,后来一想,把它设置为不能与用户交互的,根据响应者链,他会自动的和它下面的可与用户交互的控件进行交互。所以我多想了。《这里如果在textview上面添加一个textview,那么就设置上面的textview为不可于用户交互的》

                    2、UITextView上如何加上类似于UITextField的placeholder呢,其实在UITextView上加上一个UILabel或者UITextView,如果用UILable的话,会出现一个问题就是当placeholder的文字过长导致换行的时候就会出现问题,而用UITextView则可以有效避免此问题。


上面图是xib文件写的另一个文件,我只是为了直观的表达,我写的代码如下:

_placeholderLabel = [[UILabel alloc]initWithFrame:CGRectMake(2, 3, 200, 30)];
        _placeholderLabel.text = @" 请输入内容...";
        _placeholderLabel.font = [UIFont systemFontOfSize:15];
        _placeholderLabel.textColor = UIColorFromRGB2(153, 153, 153);
        [_editView addSubview:_placeholderLabel];

下方代理方法最重要,当检测到换行,空格,输入字等,placeholder都会消失

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

//下面这句最重要
    NSInteger number = [textView.text length];
    if(number <=0)
        [self.placeholderLabel setHidden:NO];
    else
        [self.placeholderLabel setHidden:YES];
    <pre name="code" class="objc">//这是项目中textview字数的限制360
    NSInteger maxLength = 360;
if (number > maxLength) { textView.text = [textView.text substringToIndex:maxLength]; [GlobalFunc ShowToastText:@"超出最大字数!"]; number = maxLength; }}
 
 
设置textView的placeholder_第3张图片

你可能感兴趣的:(UI,placeholder,textview,UITextView,产品)