tableview插入cell和删除cell

作者: 91阿生 | 来源:发表于2016-09-17 11:22 被阅读604次
效果图 :
cell的删除与插入.gif
数据来源 :
plist1.png plist2.png
主要代码 解析:
1.点击每组的代理 -- 控制器中实现
pragma mark - ExpandHeaderFooterViewDelegate
 - (void)didSelectedHeaderFooterView: (ExpandHeaderFooterView *)headerFooterView {   
     // 1.关闭展开的组
    if (self.isOpen && self.lastSelectedSection != headerFooterView.tag) {
    
    self.isOpen = NO;
    
    // 先收起之前组的箭头
    ExpandHeaderFooterView *view = (ExpandHeaderFooterView *)[self.tableView headerViewForSection:self.lastSelectedSection];
    [view changeArrowWithIsOpen:NO];
    
    // 删除所展开的cell
    NSIndexPath *deleteIndexPath = [NSIndexPath indexPathForRow:0 inSection:self.lastSelectedSection];
    [self.tableView deleteRowsAtIndexPaths:@[deleteIndexPath] withRowAnimation:UITableViewRowAnimationAutomatic];
}

// 2.点击同一组处理
if (self.isOpen && self.lastSelectedSection == headerFooterView.tag) {
    self.isOpen = NO;
    // 删除所展开的cell
    NSIndexPath *deleteIndexPath = [NSIndexPath indexPathForRow:0 inSection:self.lastSelectedSection];
    [self.tableView deleteRowsAtIndexPaths:@[deleteIndexPath] withRowAnimation:UITableViewRowAnimationAutomatic];
    return ;
}

// 3.展开所点击的组(非同一组)
      self.isOpen = YES;
      self.lastSelectedSection = headerFooterView.tag;

      NSIndexPath *insertIndexPath = [NSIndexPath indexPathForRow:0 inSection:headerFooterView.tag];
     [self.tableView insertRowsAtIndexPaths:@[insertIndexPath] withRowAnimation:UITableViewRowAnimationAutomatic];
 }
2.模型中的代码 :

---.h文件

@property (nonatomic, copy) NSString *title;
@property (nonatomic, strong) NSArray *texts;

/// 自定义属性
/// 存放每个组中文本的计算高度, 用于在cell中创建label时设置高度
@property (nonatomic, strong, readonly) NSArray *everyTextHeightArray;
/// 每个cell的最终高度
@property (nonatomic, assign) CGFloat cellHeight;
@end    

---.m文件
- (NSArray *)everyTextHeightArray {

    NSMutableArray *tmpMarray = [NSMutableArray array];

    _cellHeight = 0;

    for (int i = 0; i<_texts.count; i++) {
    
        NSString *text = _texts[i];
    
        CGFloat textHeight = [text boundingRectWithSize:CGSizeMake(APP_SCREEN_WIDTH - 40, MAXFLOAT) options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName : [UIFont systemFontOfSize:14]} context:nil].size.height + 15; // 加15: 每个label之间的距离
    
        _cellHeight += textHeight;
    
        [tmpMarray addObject:@(textHeight)];
    }   
    return tmpMarray;
}

完整代码地址:

https://github.com/StephentTom/TableViewSectionExpand.git

相关文章

  • tableview插入cell和删除cell

    效果图 : 数据来源 : 主要代码 解析: 1.点击每组的代理 -- 控制器中实现 pragma mark - E...

  • tableView小结

    tableView点击cell之后不会一直有背景效果 刷新特定行的cell 插入特定行数的cell 删除特定行数的...

  • 解决 删除Cell 数据越界问题

    在删除tableView 中的cell的时候, 删除最后一条cell 时 崩溃日志显示 数据越界, 解决方法:

  • UITableViewCell数据刷新方法和原则

    数据刷新方法 重新刷新屏幕上的所有cell 刷新特定行的cell 插入特定行数的cell 删除特定行数的cell ...

  • UI基础11

    数据刷新方法 重新刷新屏幕上的所有cell 刷新特定行的cell 插入特定行数的cell 删除特定行数的cell ...

  • tableViewclee刷新数据

    数据刷新方法 重新刷新屏幕上的所有cell 刷新特定行的cell 插入特定行数的cell 删除特定行数的cell ...

  • tableView性能优化 - cell的数据刷新

    数据刷新方法 重新刷新屏幕上的所有cell 刷新特定行的cell 插入特定行数的cell 删除特定行数的cell ...

  • UITableView Crash

    当删除单行Cell Crash tableView.deleteRows(at: [indexPath], wit...

  • tableView 的数据刷新

    数据刷新 重新刷新屏幕上的所有 cell 插入指定行数的 cell 更新指定行数据 删除指定行的 cell 区别:...

  • Jupyter notebook使用技巧

    快捷键 -插入cell:a,b-删除cell:x-切换cell的模式:y,m-执行:shift+enter-自动补...

网友评论

    本文标题:tableview插入cell和删除cell

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