美文网首页固予推送程序员
iOS 键盘处理(改变键盘为完成键),UITextField键盘

iOS 键盘处理(改变键盘为完成键),UITextField键盘

作者: IOSMan | 来源:发表于2016-08-18 10:29 被阅读5431次
    很多时候用到UITextField时,处理键盘是一个很棘手的问题。

    问题一:如何隐藏键盘?

    方案1.改变键盘右下角的换行(enter)键为完成键,后实现代理方法键盘自动回弹

    keyBoardControll.gif
    UITextField *textField = [[UITextField alloc]initWithFrame:CGRectMake(100, 300, 200, 40)];
    [self.view addSubview:textField];
        
    textField.delegate = self;
    textField.returnKeyType = UIReturnKeyDone;//改变为完成键,如果在项目中导入了YYText框架那么原生的就被替换掉了,变为returnKeyType = UIKeyboardTypeTwitter;
    
    //实现UITextField代理方法
    - (BOOL)textFieldShouldReturn:(UITextField *)textField {
        
        [textField resignFirstResponder];//取消第一响应者
        
        return YES;
    }
    /*textField.returnKeyType可以改变为很多样式
    typedef NS_ENUM(NSInteger, UIReturnKeyType) {
        UIReturnKeyDefault,
        UIReturnKeyGo,
        UIReturnKeyGoogle,
        UIReturnKeyJoin,
        UIReturnKeyNext,
        UIReturnKeyRoute,
        UIReturnKeySearch,
        UIReturnKeySend,
        UIReturnKeyYahoo,
        UIReturnKeyDone,
        UIReturnKeyEmergencyCall,
        UIReturnKeyContinue NS_ENUM_AVAILABLE_IOS(9_0),
    };
    */
    

    当然搜狗输入法是自带隐藏键盘的功能的,但是你不能保证每个用户都装有搜狗输入法,这种方案也会改变搜狗键盘的右下角按钮为完成键

    方案2.点击textField以外区域键盘回弹

    - (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
        [self.view endEditing:YES];
    }
    

    如果textField在tableView上还可以实现下面的tableView的代理方法

    -(void)tableView:(UITableView*)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
        [self.view endEditing:YES];
    }
    

    问题二:键盘键盘遮挡输入框的的问题

    解决方案

    #pragma mark - textFieldDelegate(别忘了遵守协议设置代理)
    - (void)textFieldDidBeginEditing:(UITextField *)textField {
       self.view.y = self.view.y - 216;  //216是输入框在最底部时view移动的距离,具体移动多少距离,需要根据实际情况而定
    }
    
    - (void)textFieldDidEndEditing:(UITextField *)textField {
      self.view.y = self.view.y + 216;
    }
    

    相关文章

      网友评论

      • doubleJJ:如果许多页面都想这样改呢 ,怎么全局替换呀?
      • 狂奔的蜗牛_:如何现实成 中文“完成”么?请教大神
        IOSMan:如果是在中文输入状态就会显示“完成”,如果是英文输入法就会显示“Done”
      • a917617c35b7:代码是怎么添加进去的?
        a917617c35b7:@IOSMan 哦我知道了
        IOSMan:@初夏的荷 代码添加到哪里?文章吗?用markdown的语法编辑在代码的头尾加上```

      本文标题:iOS 键盘处理(改变键盘为完成键),UITextField键盘

      本文链接:https://www.haomeiwen.com/subject/fhzysttx.html