(二十九)动态单元格 - 循环利用注意全面覆盖信息

动态单元格可以绑定一个Cell控制器,优点是可以任意定义Cell的样式,然后在控制器里设置Cell的内容,例如布置为下图的样式:


从storyboard绑定标识的方法:设置Identifier后,即可通过出队方法获取这个Cell。


获取这个Cell的方法:这样是自动进行缓存池优化的,缓存池中没有,直接从storyboard中的模板创建。

AppCell *cell = [tableView dequeueReusableCellWithIdentifier:@"app"];

这是模拟的一个应用管理App,在表格的每一行显示一个App的信息和下载按钮,为了获取Cell信息,应该建立一个模型,Cell设置数据的时机是Cell出队之后,返回之前,在这里对Cell传递模型数据,因此只要重写Cell的set方法传入模型即可。

因为Cell有控制器,因此可以通过拖线的方式绑定控件,然后进行相应的设置(注意控件的名称不要和Cell自带的控件重名,例如imageView本来就有,注意避免重名)。

一个技巧:如果要实现不同的行Cell的多样化,可以让indexPath不同时出队的Cell的ID不同,一定要选择动态单元格。

为了实现主控制器对按钮的监听,需要主控制器监听Cell的按钮监听,注意代理方法要传入被代理的对象,这是规范。


循环利用带来的困扰:下载键点击后显示的为已下载,但是上下拖动tableView时,循环利用已有的Cell时因为信息覆盖的不够可能会还保持已下载。

因此,使用循环利用一定要覆盖全部状态

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
我理解你的问题是如何使用poi-tl库动态循环打印数据并且合并单元格避免重复。以下是一个示例代码片段,可以帮助你实现这个功能: ``` // 创建一个Word模板 XWPFTemplate template = XWPFTemplate.compile("template.docx").render(); // 获取需要循环打印的数据 List<Map<String, Object>> dataList = getDataList(); // 获取模板中需要替换的变量 Map<String, Object> replaceMap = getReplaceMap(); // 在模板中插入表格 template.insertTable("{{table}}", dataList.size() + 1, 5, new ITableRenderPolicy() { @Override public void render(XWPFTable table, Object data) { // 设置表格样式 setTableStyle(table); // 获取表格中的第一行,用于设置表头 XWPFTableRow headerRow = table.getRow(0); headerRow.getCell(0).setText("序号"); headerRow.getCell(1).setText("姓名"); headerRow.getCell(2).setText("性别"); headerRow.getCell(3).setText("年龄"); headerRow.getCell(4).setText("地址"); // 循环插入数据 for (int i = 0; i < dataList.size(); i++) { Map<String, Object> dataMap = dataList.get(i); XWPFTableRow dataRow = table.getRow(i + 1); dataRow.getCell(0).setText(String.valueOf(i + 1)); dataRow.getCell(1).setText(String.valueOf(dataMap.get("name"))); dataRow.getCell(2).setText(String.valueOf(dataMap.get("gender"))); dataRow.getCell(3).setText(String.valueOf(dataMap.get("age"))); dataRow.getCell(4).setText(String.valueOf(dataMap.get("address"))); // 判断是否需要合并单元格 if (i > 0 && dataMap.get("name").equals(dataList.get(i - 1).get("name"))) { mergeCellsVertically(table, i, 0, i - 1); } } } }); // 替换模板中的变量 template.replaceDocument(replaceMap); // 输出生成的Word文档 template.write(new FileOutputStream("output.docx")); // 关闭模板 template.close(); ``` 在上述代码中,我们使用了poi-tl库中的`ITableRenderPolicy`来实现表格的动态循环渲染。在渲染每一行数据时,我们判断是否需要合并单元格,如果当前行的姓名与前一行的姓名相同,则需要将当前行的姓名单元格与前一行的姓名单元格合并。为了实现合并单元格,我们使用了`mergeCellsVertically`方法,该方法来自于poi库。 希望以上代码可以帮助你解决问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值