在iOS中的UITableView中展开/折叠部分?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (31)

有人能告诉我的执行方式UITableView的展开/折叠动画sectionsUITableView下面?

要么

提问于
用户回答回答于

我很肯定你必须制作自己的自定义标题行,并将其作为每个部分的第一行。我不确定你现在可以轻松地从他们的工作方式中获取操作。你可以很容易地将一个单元格设置为看起来像一个标题,并设置tableView:didSelectRowAtIndexPath扩展或折叠手动的部分。

如果我是你,我会存储一组布尔值,对应每个部分的“扩展”值。然后,您可以tableView:didSelectRowAtIndexPath在每个自定义标题行上切换此值,然后重新加载该特定部分。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    if (indexPath.row == 0) {
        ///it's the first row of any section so it would be your custom section header

        ///put in your code to toggle your boolean value here
        mybooleans[indexPath.section] = !mybooleans[indexPath.section];

        ///reload this section
        [self.tableView reloadSections:[NSIndexSet indexSetWithIndex:indexPath.section] withRowAnimation:UITableViewRowAnimationFade];
    }
}

然后,你将设置你的号码numberOfRowsInSection以检查该mybooleans值,如果该部分未展开,则返回1,或者如果该部分展开,则返回1+该部分中的项目数。

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {

    if (mybooleans[section]) {
        ///we want the number of people plus the header cell
        return [self numberOfPeopleInGroup:section] + 1;
    } else {
        ///we just want the header cell
        return 1;
    }
}

您还必须更新cellForRowAtIndexPath以返回任何部分中第一行的自定义标题单元格。

用户回答回答于

Apple提供了一些使用表格视图节标题为展开/折叠动作设置动画的示例代码:表格视图动画和手势

这种方法的关键是实现- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section并返回一个包含按钮的自定义UIView(通常与标题视图本身的大小相同)。通过继承UIView并将其用于标题视图(如本示例所示),你可以轻松地存储其他数据,如节号。

扫码关注云+社区