UITextField中有一个placeholder属性,可以设置UITextField的占位文字,起到提示用户的作用。可是UITextView就没那么幸运了,apple没有给UITextView提供一个类似于placeholder这样的属性来供开发者使用。下面我就把自己能够想到的和网友提供的方法汇总一下,让更多的开发者知道,原来有这么多方法可以实现UITextView的占位文字。
方法一:
1.把UITextView的text属性当成“placeholder”使用。
2.在开始编辑的代理方法里清除“placeholder”。
3.在结束编辑的代理方法里根据条件设置“placeholder”。
特点:这种方法的特点是,当用户点击了textView,placeholder占位文字就会立马消失,官方的placeholder是当系统监听到用户输入了文字后placeholder才会消失。
// 创建textView UITextView *textView =[[UITextViewalloc]initWithFrame:CGRectMake(20,70,SCREEN.width-40,100)]; textView.backgroundColor= [UIColor whiteColor]; textView.text = @"我是placeholder"; textView.textColor = [UIColor grayColor]; textView.delegate = self; [self.view addSubview:textView]; #pragma mark - UITextViewDelegate - (void)textViewDidEndEditing:(UITextView *)textView { if(textView.text.length < 1){ textView.text = @"我是placeholder"; textView.textColor = [UIColor grayColor]; } } - (void)textViewDidBeginEditing:(UITextView *)textView { if([textView.text isEqualToString:@"我是placeholder"]){ textView.text=@""; textView.textColor=[UIColor blackColor]; } }
方法二:
1.创建textView
2.给textView添加一个UILabel子控件,作为placeholder
3.在文本改变的代理方法里面显示/隐藏UILabel
特点:该方法同样也可以实现类似于placeholder的功能。相比较方法一,方法二可以实现动态监听文本的改变,并非弹出键盘就立即清除placeholder,只有当用户开始输入文本的时候。placeholder才会消失。同样,当用户清空文本的时候,placeholder又会重新显示出来。
同样地思路,我们也可以用两个UITextView来实现placeholder的功能,再次就不在详述。
#import "WSViewController.h" @interface WSViewController () <UITextViewDelegate> @property(nonatomic, weak)UITextView *textView; @property(nonatomic, weak)UILabel *placeHolder; @end @implementation WSViewController - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. [self setupTextView]; } // 添加textView - (void)setupTextView { UITextView *textView = [[UITextView alloc] initWithFrame:CGRectMake(10, 74, SCREEN_WIDTH - 2 * 10, 200)]; textView.frame = CGRectMake(10, 74, SCREEN_WIDTH - 2 * 10, 200); [self.view addSubview:textView]; self.textView = textView; textView.contentInset = UIEdgeInsetsMake(-64, 0, 0, 0); textView.delegate = self; [self setupPlaceHolder]; //在弹出的键盘上面加一个view来放置退出键盘的Done按钮 UIToolbar * topView = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, 320, 30)]; [topView setBarStyle:UIBarStyleDefault]; UIBarButtonItem * btnSpace = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:self action:nil]; UIBarButtonItem * doneButton = [[UIBarButtonItem alloc] initWithTitle:@"完成" style:UIBarButtonItemStyleDone target:self action:@selector(dismissKeyBoard)]; NSArray * buttonsArray = [NSArray arrayWithObjects:btnSpace, doneButton, nil]; [topView setItems:buttonsArray]; [textView setInputAccessoryView:topView]; } // 给textView添加一个UILabel子控件 - (void)setupPlaceHolder { UILabel *placeHolder = [[UILabel alloc] initWithFrame:CGRectMake(15, -2, SCREEN_WIDTH - 2 * 15, 200)]; self.placeHolder = placeHolder; placeHolder.text = @"我是placeholder"; placeHolder.textColor = [UIColor lightGrayColor]; placeHolder.numberOfLines = 0; placeHolder.contentMode = UIViewContentModeTop; [self.view addSubview:placeHolder]; } #pragma mark - UITextViewDelegate - (void)textViewDidChange:(UITextView *)textView { if (!textView.text.length) { self.placeHolder.alpha = 1; } else { self.placeHolder.alpha = 0; } } //关闭键盘 -(void) dismissKeyBoard{ [self.textView resignFirstResponder]; } @end
方法三:
1.添加textView
2.给textView的layer绘制文字
3.在文本改变的方法里控制绘制文字的显示/隐藏
方法四:
1.利用runtime便利出来UITextView的placeholder属性,然后给该属性赋值。