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判断等等。总之会有一种适合你的方法。

  • 相关阅读:
    深入admin之chang_list
    List<T>列表通用过滤模块设计
    Mysql行转换为列
    Linux中cp直接覆盖不提示的方法
    hibernate Restrictions 用法
    java.lang.OutOfMemoryError: PermGen space
    ruby+gem常用命令
    Linux查看CPU和内存使用情况
    在Ubuntu 9.04下配置Apache和ModPython
    有关查询和执行计划的DMV 从而明确那些SQL要优化
  • 原文地址:https://www.cnblogs.com/66it/p/5264434.html
Copyright © 2011-2022 走看看