美文网首页
关于键盘遮挡tableview中的textfield问题,偶然发

关于键盘遮挡tableview中的textfield问题,偶然发

作者: lixiangdev | 来源:发表于2016-12-13 11:03 被阅读0次

    因项目需求,一个页面中有十几个输入框用于提交。每个cell样式都一样,直接一个cell就实现。
    上方的输入框点击后键盘不会遮挡,下方的会遮挡,一开始也是像网上说得那样,设置tableview的偏移,但输入完后必须点击完成或者别的地方收缩键盘,才可下次输入,且tabelview不可滚动。
    我先解决键盘不能滚动的问题,就不用tableview的偏移,直接缩小tableview的高度,让tableview的高度变为原来的高度减去键盘的高度。这样在键盘上方的tableview也能滑到底部且不会被键盘遮挡,这里用键盘出现消失的通知不再多说。
    不可滚动解决了,开始解决偏移,又尝试了获取cell在tableview中的坐标位置,偏移到那一点,效果是实现了,但是不是在键盘正上方,效果不理想。
    之后就把代码删了,只剩缩小tableview高度了,一运行,哎?被遮挡的textfield自动便宜到键盘之上了,检查代码,就只有两点,一个是textfield 加了个事件,是开始编辑事件,在事件里将当前的textfield设为第一响应者,之后键盘弹出缩小tableview高度。
    代码

    [textfield addTarget:self action:@selector(beginedit:) forControlEvents:UIControlEventEditingDidBegin];
    
    -(void)beginedit:(UITextField*)textfield{
         [textfield becomeFirstResponder];
    }
    
    -(void)keyBoardWasShowd:(NSNotification*)keyboardNotification{
        NSDictionary*info=[keyboardNotification userInfo];
        CGSize keyboardSize=[[info objectForKey:UIKeyboardFrameEndUserInfoKey]CGRectValue].size;
        CGRect begin = [[[keyboardNotification userInfo] objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue];
        CGRect end = [[[keyboardNotification userInfo] objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue];
        
    //获取不同的键盘高度,取最后显示的键盘高度作为当前键盘
    if(begin.size.height>0 && (begin.origin.y-end.origin.y>0)){
       [UIView animateWithDuration:0.2 animations:^{
       self.tableView.frame=CGRectMake(0,_tableView.frame.origin.y,Screen_Width,Screen_Height-64-keyboardSize.height);
        }];
    }
    

    相关文章

      网友评论

          本文标题:关于键盘遮挡tableview中的textfield问题,偶然发

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