iOS reloadData 导致键盘退出的问题

问题

需求:
1.项目中UITableView的cell嵌套了UITextView
2.根据UITextView里面的文字的长度自动适应高度
这就难免使用UITableView- (void)reloadData; 或者是- (void)reloadRowsAtIndexPaths:(NSArray *)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 导致键盘退出的问题)