zoukankan      html  css  js  c++  java
  • iOS键盘处理

    键盘处理
    一.常用属性及方法
    // 文本框聚焦, 弹出键盘 
    - (BOOL)becomeFirstResponder;
    // 文本框失焦,退出键盘
    - (BOOL)resignFirstResponder;
    // 一次性退出任何键盘
    [self.view endEditing:YES];
    // 自定义键盘
    @property (readwrite, retain) UIView *inputView;
    // 自定义键盘顶部显示工具条
    @property (readwrite, retain) UIView *inputAccessoryView;
    // 设置代理步骤
    UITextField的代理对象用来控制和监听文本框的输入
    1>    设置代理对象
    2>    遵守协议
    3>    实现代理方法
    
    UITextField代理方法:         
    // 当文本框开始获得焦点的时候调用
    - (void)textFieldDidBeginEditing:(UITextField *)textField;
    // 当用户失去焦点的时候调用
    - (void)textFieldDidEndEditing:(UITextField *)textField;   
    // 在文本框准备聚焦的时候调用,返回NO代表不允许聚焦(编辑)
    - (BOOL)textFieldShouldBeginEditing:(UITextField *)textField;       
    // 在文本框准备失去焦点(退出键盘)的时候调用,返回YES代表允许退出键盘
    - (BOOL)textFieldShouldEndEditing:(UITextField *)textField;         
    // 在用户每次输入的时候都会调用,返回YES代表允许输入, 返回NO,代表禁止改变文本框的文字(不能增加、删除文字)
    - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
    // 点击了键盘右下角的按钮就会调用(return key)
    - (BOOL)textFieldShouldReturn:(UITextField *)textField; 
    
    二.递归遍历视图中所有文本框
    - (void)isTextField:(UIView *)view
    {
        if (view.subviews.count == 0) return;
        for (UIView * child in view.subviews) {
            if ([child isKindOfClass:[UITextField class]]) {
              // insert your code here...
            }
            else
            {
                [self isTextField:child];
            }
        }
    }
    
    三、监听键盘的显示和隐藏
    1.监听键盘通知
    NSNotificationCenter *center = [NSNotificationCenter defaultCenter];// 单例
    
    // 1.显示键盘
    [center addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil];
    
    // 2.隐藏键盘
    [center addObserver:self selector:@selector(keyboardWillHide:) name:UIKeyboardWillHideNotification object:nil];
    
    2.移除键盘通知(非ARC比做操作)
    - (void)dealloc
    {
        [[NSNotificationCenter defaultCenter] removeObserver:self];
    }
    
    3.注意:当弹出一个新的键盘时,才会发出显示键盘的通知
    
    四、关闭键盘方法
    #pragma mark 关闭键盘方法1
    [self.view endEditing:YES];
    // 成功关闭键盘的条件:self.view或者其子视图是第一响应者
    
    #pragma mark 关闭键盘的方法2
    // 递归找到第一响应者,让它把键盘给退回去
    [[self findFirstResponder:self.view] resignFirstResponder];
    - (UIView*)findFirstResponder:(UIView*)view {
        for ( UIView *childView in view.subviews ) {  // 遍历子视图
          if ( [childView respondsToSelector:@selector(isFirstResponder)]
      && [childView isFirstResponder] ) { 
                return childView; // 如果childView是第一响应者
       }
            UIView *result = [self findFirstResponder:childView];
            if (result)  return result;
        }
        return nil;
    }
  • 相关阅读:
    Apache ActiveMQ消息中间件的基本使用
    struts2结合生成验证码
    Python中docstring文档的写法
    Nginx+uWSGI+Django原理
    Python垃圾回收机制详解
    Python数据库连接池实例——PooledDB
    构建高可用服务端
    Python使用multiprocessing实现一个最简单的分布式作业调度系统
    python3 分布式进程(跨机器)BaseManager(multiprocessing.managers)
    python BaseManager分布式学习
  • 原文地址:https://www.cnblogs.com/orzmj123/p/3497534.html
Copyright © 2011-2022 走看看