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;
    }
  • 相关阅读:
    牛客网 二叉树的镜像 JAVA
    牛客网 反转链表 JAVA
    牛客网 调整数组顺序使奇数位于偶数前面 JAVA
    Integer to Roman LeetCode Java
    Valid Number leetcode java
    Longest Common Prefix
    Wildcard Matching leetcode java
    Regular Expression Matching
    Longest Palindromic Substring
    Add Binary LeetCode Java
  • 原文地址:https://www.cnblogs.com/orzmj123/p/3497534.html
Copyright © 2011-2022 走看看