標籤:
在iOS中,一般textfield可以顯示一航文字,有placeholder(預留位置,用來顯示提示資訊),textView可以顯示多行文字但是卻沒有placeholder這項,下面的方法可以解決這個問題。
@interface PersonSetViewController ()<UITextViewDelegate>
//遵從代理協議
- (void)viewDidLoad {
[super viewDidLoad];
//放在底部的兩個用於顯示placeholder的textView,將它們設定為不可編輯
[_farmNameTextView setEditable:NO];
[_farmDiscribeTextView setEditable:NO];
//放在上面的兩個用於使用者輸入的textView,設定self為代理
self.farmNameTView.delegate =self;
self.farmDiscrebeTView.delegate =self;
}
//用來實現的方法
-(BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text{
if(![text isEqualToString:@""]) //如果text不為空白,那麼隱藏下面的兩個textView
{
[_farmNameTextView setHidden:YES];
[_farmDiscribeTextView setHidden:YES];
}
//如果字元為空白並且游標在第一位,並且沒有字元的時候,那麼顯示下面兩個textView
if([text isEqualToString:@""] && range.length==1 && range.location==0){
[_farmNameTextView setHidden:NO];
[_farmDiscrebeTView setHidden:NO];
}
//如果遇到\n(斷行符號鍵),那麼收合鍵盤
if ([text isEqualToString:@"\n"]) {
[textView resignFirstResponder];
return NO; //狀態為不編輯
}
return YES; //狀態為編輯
}
//當出現鍵盤的時候,需要把原來的view向上移動,用動畫實現效果
//開始編輯
-(void)textViewDidBeginEditing:(UITextView *)textView{
[UIView beginAnimations:nil context:nil]; //動畫開始
[UIView setAnimationDuration:0.2];//動畫時間長度0.2秒
[UIView setAnimationBeginsFromCurrentState:YES]; //設定動畫從目前狀態開始
self.dataScrollView.frame=CGRectMake(0, 0, CGRectGetWidth(self.dataScrollView.frame), CGRectGetHeight(self.dataScrollView.frame)); //設定編輯狀態下view的frame
[UIView commitAnimations]; //提交動畫
}
//結束編輯
-(void)textViewDidEndEditing:(UITextView *)textView{
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:0.2];
[UIView setAnimationBeginsFromCurrentState:YES];
self.dataScrollView.frame=CGRectMake(0, 133, CGRectGetWidth(self.dataScrollView.frame), CGRectGetHeight(self.dataScrollView.frame)); //設定非編輯狀態下view的frame
[UIView commitAnimations];
}
iOS設定textView的placeholder