美文网首页
iOS reloadData 导致键盘退出的问题

iOS reloadData 导致键盘退出的问题

作者: 蝼蚁撼树 | 来源:发表于2018-05-16 16:18 被阅读0次

    问题

    需求:
    1.项目中UITableView的cell嵌套了UITextView
    2.根据UITextView里面的文字的长度自动适应高度
    这就难免使用UITableView- (void)reloadData; 或者是- (void)reloadRowsAtIndexPaths:(NSArray<NSIndexPath *> *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation

    但是非常不幸
    一调用- (void)reloadData; 会调用resignFirstResponder
    会导致键盘的退出,给用户造成非常不好的体验.

    解决方法:

    使用

       [self.tableView beginUpdates];
       [self.tableView endUpdates];
    

    来替换 reloadData

    可以完美调用-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath,但是不引发resignFirstResponder

    最后附上部分示例代码:

     WEAK_OBJECT(model);
            cell.textViewTextChanged = ^(NSString *text, UITextView *sender) {
                STRONG_OBJECT(model);
                CGFloat width = (SCREEN_WIDTH - 20 - 100);
                CGFloat height =  [text boundingRectWithSize:CGSizeMake(width, CGFLOAT_MAX) options:NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading attributes:@{NSFontAttributeName: FONT(14)} context:nil].size.height;
                model.key_value = text;
                if (self.preViewH != ceil(height)) {
                    self.preViewH = ceil(height);
          //原先使用
       //             [self.tableView reloadData];
    //替换成
                    [self.tableView beginUpdates];
                    [self.tableView endUpdates];
                }
                
            };
    

    相关资料

    相关文章

      网友评论

          本文标题:iOS reloadData 导致键盘退出的问题

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