iOS解決鍵盤彈出遮擋輸入框問題

AppleWiner發表於2016-04-07

1、錯誤:


                鍵盤遮擋輸入框最常見的可能就是在登入介面了,無論有多少個textFiled,不論是在VC的任何位置。都有可能造成鍵盤彈出來時,把輸入框擋住了。如圖:


                                                                                       


2、解決方法:


            首先要寫上UITextFieldDelegate代理協議,,,切記!!!

  1:新增文字輸入框,申明兩個屬性


@property (nonatomic, weak) UITextField * userNameText;

@property (nonatomic, weak) UITextField * userPwdText;
UITextField * userNameText = [AutolayoutView autolayoutTextFieldWithPlaceholder:@"賬號"];

userNameText.delegate = self;

[self.view addSubview:userNameText];

self.userNameText = userNameText;

UITextField * userPwdText = [AutolayoutView autolayoutTextFieldWithPlaceholder:@"密碼"];

userPwdText.delegate = self;

[self.view addSubview:userPwdText];

self.userPwdText = userPwdText;

2:實現代理方法

   此處主要解決

// 當前點選textfield的座標的Y值 + 當前點選textFiled的高度 - (螢幕高度- 鍵盤高度 - 鍵盤上tabbar高度)

// 在這一部 就是了一個 當前textfile的的最大Y值 和 鍵盤的最全高度的差值,用來計算整個view的偏移量

- (void)textFieldDidBeginEditing:(UITextField *)textField

{

NSLog(@"textFieldDidBeginEditing");

CGRect frame = textField.frame;

CGFloat heights = self.view.frame.size.height;

// 當前點選textfield的座標的Y值 + 當前點選textFiled的高度 - (螢幕高度- 鍵盤高度 - 鍵盤上tabbar高度)

// 在這一部 就是了一個 當前textfile的的最大Y值 和 鍵盤的最全高度的差值,用來計算整個view的偏移量

int offset = frame.origin.y + 42- ( heights - 216.0-35.0);//鍵盤高度216

NSTimeInterval animationDuration = 0.30f;

[UIView beginAnimations:@"ResizeForKeyBoard" context:nil];

[UIView setAnimationDuration:animationDuration];

float width = self.view.frame.size.width;

float height = self.view.frame.size.height;

if(offset > 0)

{

CGRect rect = CGRectMake(0.0f, -offset,width,height);

self.view.frame = rect;

}

[UIView commitAnimations];

}

3:點選空白處的時候讓其回到原來位置

/**

*  textField 取消選中狀態

*

*/

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event

{

NSLog(@"touchesBegan");

[self.view endEditing:YES];

NSTimeInterval animationDuration = 0.30f;

[UIView beginAnimations:@"ResizeForKeyboard" context:nil];

[UIView setAnimationDuration:animationDuration];

CGRect rect = CGRectMake(0.0f, 0.0f, self.view.frame.size.width, self.view.frame.size.height);

self.view.frame = rect;

[UIView commitAnimations];

}
還有點選鍵盤的return鍵的時候恢復原狀就要在
- (BOOL)textFieldShouldReturn:(UITextField *)textField;裡頭處理。
切記一定要判斷當前的textile是否是你點選的self.userNameText了。在讓他恢復原狀,解決後效果圖:

                                                               


相關文章