11

我想在点击时展开 tableview 单元格。有一个表格视图,其中两个单元格是可扩展的,而其他的则不是。我需要当我点击可扩展单元格时,它应该在它下面显示单元格,再次点击它应该隐藏。下面有一张图片定义了这一点。

在此处输入图像描述

我怎样才能实现这个功能,请指导以上。提前致谢。

4

7 回答 7

12

是可扩展 UITableView 的完整教程

这是代码片段。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    if ([self tableView:tableView canCollapseSection:indexPath.section])
    {
        if (!indexPath.row)
        {
            // only first row toggles exapand/collapse
            [tableView deselectRowAtIndexPath:indexPath animated:YES];

            NSInteger section = indexPath.section;
            BOOL currentlyExpanded = [expandedSections containsIndex:section];
            NSInteger rows;

            NSMutableArray *tmpArray = [NSMutableArray array];

            if (currentlyExpanded)
            {
                rows = [self tableView:tableView numberOfRowsInSection:section];
                [expandedSections removeIndex:section];

            }
            else
            {
                [expandedSections addIndex:section];
                rows = [self tableView:tableView numberOfRowsInSection:section];
            }

            for (int i=1; i<rows; i++)
            {
                NSIndexPath *tmpIndexPath = [NSIndexPath indexPathForRow:i 
                                                               inSection:section];
                [tmpArray addObject:tmpIndexPath];
            }

            UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];

            if (currentlyExpanded)
            {
                [tableView deleteRowsAtIndexPaths:tmpArray 
                                 withRowAnimation:UITableViewRowAnimationTop];

                cell.accessoryView = [DTCustomColoredAccessory accessoryWithColor:[UIColor grayColor] type:DTCustomColoredAccessoryTypeDown];

            }
            else
            {
                [tableView insertRowsAtIndexPaths:tmpArray 
                                 withRowAnimation:UITableViewRowAnimationTop];
                cell.accessoryView =  [DTCustomColoredAccessory accessoryWithColor:[UIColor grayColor] type:DTCustomColoredAccessoryTypeUp];

            }
        }
    }
}

如下图所示

在此处输入图像描述

这个这个解决方案还可以帮助您了解如何管理 Expandable TableView

于 2013-02-27T10:11:40.210 回答
4

好的,我在想的是,标题、事件开销朋友将是背景、标题和扩展UIView的自定义。所以基本上UIImageViewUILabelUIButton

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView

返回您拥有的标题的计数。

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section

每个标题都有回报UIView

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

计算该标题中的行数。您可能需要为此维护一个数组。

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath;

具有单元格项目的高度

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section

最初它应该是所有部分的 0(零),当用户点击展开时,它应该相对于该部分内的行数 * 单元格高度增加。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

您可能需要一些好的逻辑来设置所有行以进行扩展

您的扩展按钮操作类似于,

- (void) expandSection:(UIButton *)sender;

您可以使用 sender.tag 确定要扩展的部分,所以不要忘记正确添加标签。您可能需要一个intin.h文件来存储当前部分,并且可以在- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section数据源方法中使用。

于 2013-02-27T11:09:16.693 回答
3

我认为你想要的东西已经被苹果给了。您可以查看Apple 在Table View Animations and Gestures标题下提供的示例代码

于 2013-02-27T10:07:21.517 回答
2

我在下面给出了示例源代码。您可以根据您的要求自定义此示例。

源代码链接:点这里

输出屏幕:

在此处输入图像描述

于 2013-05-29T12:28:09.780 回答
2

JKExpandTableView是 MIT 许可的 iOS 库,它实现了可扩展的表格视图。请务必检查包含的示例项目。

截屏

于 2013-07-26T05:36:29.273 回答
0

代表可以做到这一点

- (NSInteger)tableView:(UITableView *)tableView indentationLevelForRowAtIndexPath:(NSIndexPath *)indexPath {
       //write code here
    }
于 2013-02-27T10:14:08.353 回答
0

接受的答案是正确的,但链接已过时。要使该示例正常工作,您必须做一些额外的事情:

从这里下载 ExpandableTableCells 项目:
https ://github.com/cocoanetics/Examples

从这里下载 DTCustomColoredAccessory.h 和 .m 文件: https ://github.com/Cocoanetics/DTFoundation/tree/develop/Core/Source/iOS

将 DTCustomColoredAccessory 文件放入 ExpandableTableCells 项目。

那里有一个工作示例,从那里编辑和移动更容易,而不是尝试从零开始写入。

于 2014-02-19T08:34:32.773 回答