有人能告诉我在下面UITableView个动画中的sections个中执行UITableView个可展开/可折叠动画的方法吗?

推荐答案

您必须制作自己的自定义标题行,并将其作 for each 部分的第一行.将UITableView或已经在那里的标头子类化将是一件痛苦的事情.根据他们现在的工作方式,我不确定你能不能轻易地让他们采取行动.您可以设置一个看起来像页眉的单元格,并将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以返回任何节中第一行的自定义标题单元格.

Ios相关问答推荐

如何使视图完全适合屏幕,而不会在旋转时溢出手机屏幕的边界?

如何在wiftUI中管理导航栈?

在滚动视图中固定页眉,但在页眉上方嵌入元素

如何使用 SwiftData 从列表中删除子项目?

无法关闭包含字体 Select 器的工作表

仅更改 AttributedString 的字符串(例如 UIButton 配置 attributeTitle)

更改初始控制器无效

在 iOS 上启用明文本地流量在 .NET MAUI 中不起作用

在 SwiftUI 中放置全局 NavigationPath 的位置

Swift Combine 防止初始值触发接收器并同时防止重复?

PropertyWrapper 不存在的 Codable 属性的默认值

SwiftUI - 使用切换switch 切换键盘类型(默认/数字)?

如何将标准化坐标系中的点的位置转换为具有相对位置的常规坐标系?

在 Grand Central Dispatch 中使用 dispatch_sync

iOS 10 错误:UICollectionView 接收到具有不存在索引路径的单元格的布局属性

用 PC 调试 ipad safari

检测 iOS UIDevice 方向

iOS Swift - 获取当前本地时间和日期时间戳

为所有 UIImageViews 添加圆角

如何关闭 iOS 键盘?