0

我有一个具有可扩展单元格的 UItable。当用户点击某个部分时,它会展开并显示行。但是我需要在打开新部分之前关闭任何以前打开的部分。我想我需要在 didselectrow 中执行此操作,只是不确定该怎么做?

我的 didselectrow 代码如下

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath    *)indexPath
{
    if(tableView.tag == 4)
    {
        //NSLog(@"Did Select Row");

        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 = [expandedSections3 containsIndex:section];
                NSInteger rows;


                NSMutableArray *tmpArray = [NSMutableArray array];

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

                }
                else
                {
                    [expandedSections3 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];

                }
                else
                {
                    [tableView insertRowsAtIndexPaths:tmpArray
                                 withRowAnimation:UITableViewRowAnimationTop];
                }
            }

            else {

            }
        }

        //NSLog(@"Button Pressed?");
    }
}
4

1 回答 1

0

reloadSections:withRowAnimation:尝试从内部调用 UITableView tableView:didSelectRowAtIndexPath:。这允许表视图重新查询您的委托以获取您指定的部分。作为一个好处,您将获得以这种方式添加和删除的行的漂亮动画。

当然,这与您当前直接操作表视图行的解决方案完全不同,因此如果您想尝试reloadSections:withRowAnimation:,您可能需要重写委托的大部分内容。更改将涉及存储您的部分的折叠/展开状态,直接在您的委托或委托引用的模型对象中,以便委托在表格视图重新查询时具有更新的返回值。

于 2012-11-20T20:34:27.343 回答