zoukankan      html  css  js  c++  java
  • 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判断等等。总之会有一种适合你的方法。

  • 相关阅读:
    游戏中战斗伤害范围-弹道飞行
    游戏中战斗伤害范围攻击计算完整全版
    更加强健的线程模型,解决线程卡死,退出异常情况
    存在即合理,重复轮子orm java版本
    游戏里12方向,任意方向计算正前方矩形规则
    我是如何设计游戏服务器架构的
    游戏中精灵对象的属性功能设计
    看我是如何处理自定义线程模型---java
    面试和面试者如何保持心态
    谈谈枚举的新用法——java
  • 原文地址:https://www.cnblogs.com/66it/p/5264434.html
Copyright © 2011-2022 走看看