在UITableViewstylePlain中展开UITableView单元格

时间:2013-02-27 09:58:52

标签: iphone ios uitableview

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

enter image description here

如何实现此功能,请指导以上内容。 提前谢谢。

7 个答案:

答案 0 :(得分:12)

Here是具有可扩展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];

            }
        }
    }
}

如下图所示

enter image description here

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

答案 1 :(得分:4)

好的,我在想的是,标题,活动开销朋友将是自定义UIView背景为UIImageView,标题为UILabel,展开为UIButton。所以基本上

- (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识别要扩展的部分,因此请不要忘记正确添加标记。您可能需要在int文件中.h来存储当前部分,并且可以在- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section数据源方法中使用。

答案 2 :(得分:3)

我认为Apple已经给出了你想要的东西。您可以在表格视图动画和手势的标题下查看Apple提供的Sample Code

答案 3 :(得分:2)

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

源代码链接:Click here

输出屏幕:

enter image description here

答案 4 :(得分:2)

JKExpandTableView是MIT许可的iOS库,用于实现expandable table view。一定要检查包含的示例项目。

screenshot

答案 5 :(得分:0)

委托人可以这样做

- (NSInteger)tableView:(UITableView *)tableView indentationLevelForRowAtIndexPath:(NSIndexPath *)indexPath {
       //write code here
    }

答案 6 :(得分:0)

接受的答案是正确的,但链接已过时。为了让这个例子起作用,你必须做更多的事情:

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

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

将DTCustomColoredAccessory文件放入ExpandableTableCells项目中。

你有一个工作的例子,它更容易编辑和从那里移动而不是尝试从零写。