【iOS開發(fā)】設(shè)置textView的默認(rèn)提示文字,有需要的朋友可以參考下。
最近項目中需要用到textView,但是在用的時候才發(fā)現(xiàn)原來textView沒有類似于textField的那種placeholder功能。
所謂placeholder就比如用戶看到一個輸入框,然后輸入框里面一般會有幾個淺灰色的文字,告訴用戶這個地方是用來寫什么內(nèi)容的,當(dāng)用戶開始輸入的時候,這幾個文字就自然而然地消失了。這幾個文字就是'Placeholder'。
網(wǎng)上搜了一下,有一種方式是使用代理;在.m文件中實現(xiàn)textview delegate的兩個方法:
(BOOL) textViewShouldBeginEditing:(UITextView *)textView
{
if(textView.tag == 0) {
textView.text = @"";
textView.textColor = [UIColor blackColor];
textView.tag = 1;
}
return YES;
}
- (void)textViewDidChange:(UITextView *)textView
{
if([textView.text length] == 0)
{
textView.text = @"Foobar placeholder";
textView.textColor = [UIColor lightGrayColor];
textView.tag = 0;
}
}
Tip:使用textView的代理需要在頭文件中加入:
這種方法確實可以實現(xiàn)我們想要的功能,但是有一個很明顯的bug:如果用戶輸入了幾個字以后,想全部刪除了重新輸入內(nèi)容,那就
會發(fā)現(xiàn)你永遠(yuǎn)都沒法刪除干凈,因為當(dāng)你把最后一個字后,textViewDidChange方法就監(jiān)測到textView.text的 length =
0了 于是就會自動幫你不上你想要顯示的placeholder。。。可以腦補(bǔ)下那個畫面,瘋狂地刪除,卻怎么也刪不干凈。
然后就采用了另外的方法,就是添加一個label,這個label里面寫入你想要顯示的placeholder,然后還是在textViewDidChange方法里面,如果當(dāng)前的text長度為0,就把label顯示出來,否則的話,就把Label隱藏了。
把我的程序里面和這部分內(nèi)容相關(guān)的摘出來吧:
.h文件
@interface FeedbackViewController : UIViewController
@propert(strong,nonatomic) IBOutlet UITextView *textView;
@end
.m文件
viewDidLoad函數(shù):
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
label = [[UILabel alloc]initWithFrame:CGRectMake(3, 3, 200, 20)];
label.enabled = NO;
label.text = @"在此輸入反饋意見";
label.font = [UIFont systemFontOfSize:15];
label.textColor = [UIColor lightGrayColor];
[self.textView addSubview:label];
}
初始化的時候把label的內(nèi)容設(shè)置一下。注意這個label是添加在textView里面的,我調(diào)試了一下 起始位置(3,3)是個還算不錯的位置。注意要把label設(shè)置成不可點擊。
textView的代理:
//TextView Delegate
- (void) textViewDidChange:(UITextView *)textView{
if ([textView.text length] == 0) {
[label setHidden:NO];
}else{
[label setHidden:YES];
}
}```