iOS_键盘处理二

问题

在前面的文章中有说到键盘的处理方式键盘处理之一,很好用。不过适用的情况是在屏幕底部只有一个输入框的时候。有朋友问到当一个界面有很多个输入框,上面的输入框点击不需要向上移动,只有下面的点击才需要界面上移的时候怎么办?

解决方案

我这里就给出一个解决方案,可能不是最优,希望看到的朋友有更好的方法能够分享给我。

  • 首先让你的xxxController继承代理
@interface xxxController()<UITextFieldDelegate>
@end
  • 让你希望能够上移的输入框XXXTextField的代理称为控制器本身
self.XXXTextField.delegate = self;
  • 让控制器监听键盘消失的通知,为的是让键盘消失的时候也能在需要时调整界面的位置
[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(keyBoardWillHideFrame:) name:UIKeyboardWillHideNotification object:nil];
  • 实现UITextField的代理方法和键盘的监听方法
- (void)textFieldDidBeginEditing:(UITextField *)textField{
    CGRect frame = self.view.frame;
    //这里的50是随便设置的
    frame.origin.y -=50;
    frame.size.height +=50;
    self.view.frame = frame;
}
-(BOOL)textFieldShouldReturn:(UITextField *)textField{
    CGRect frame = self.view.frame;
    frame.origin.y +=50;
    frame.size.height -=50;
    self.view.frame = frame;
    [textField resignFirstResponder];
    return YES;
}
-(void)keyBoardWillHideFrame:(NSNotification *)notification{
    if (self.view.frame.origin.y == -50) {
        CGRect frame = self.view.frame;
        frame.origin.y +=50;
        frame.size.height -=50;
        self.view.frame = frame;
    }
}

解决方案优化

可以让self成为需要的textfield代理,然后直接实现下面两个方法即可

-(void)textFieldDidBeginEditing:(UITextField *)textField
{
    CGRect frame = self.view.frame;
    if (frame.origin.y == 0) {
        frame.origin.y -= UpHeightFloat;
        self.view.frame = frame;
    }
}
-(void)textFieldDidEndEditing:(UITextField *)textField
{
    CGRect frame = self.view.frame;
        if (frame.origin.y < 0) {
            frame.origin.y = 0;
        }
        self.view.frame = frame;
}

解决方法很多,还可以通过绑定tag判断等等。总之会有一种适合你的方法。

原文地址:https://www.cnblogs.com/66it/p/5264434.html