【iOS開發(fā)】設(shè)置textView的默認提示文字忽刽,有需要的朋友可以參考下天揖。
最近項目中需要用到textView,但是在用的時候才發(fā)現(xiàn)原來textView沒有類似于textField的那種placeholder功能跪帝。
所謂placeholder就比如用戶看到一個輸入框今膊,然后輸入框里面一般會有幾個淺灰色的文字,告訴用戶這個地方是用來寫什么內(nèi)容的伞剑,當用戶開始輸入的時候斑唬,這幾個文字就自然而然地消失了。這幾個文字就是'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)你永遠都沒法刪除干凈托呕,因為當你把最后一個字后含蓉,textViewDidChange方法就監(jiān)測到textView.text的 length = 0了 于是就會自動幫你不上你想要顯示的placeholder。项郊。馅扣。可以腦補下那個畫面着降,瘋狂地刪除差油,卻怎么也刪不干凈。
然后就采用了另外的方法任洞,就是添加一個label蓄喇,這個label里面寫入你想要顯示的placeholder,然后還是在textViewDidChange方法里面交掏,如果當前的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]; }}
來自:嘆落花 ?> 《UITextView》