单击第二个部分时如何关闭另一个展开的部分

时间:2013-06-19 08:13:05

标签: iphone ios uitableview

我正在创建一个包含可展开部分的应用。我已经使用this教程实现了这一点。

但是现在我想在点击另一部分时关闭第一个扩展部分。有人可以帮我这个。

2 个答案:

答案 0 :(得分:0)

您可以将tableView:didSelectRowAtIndexPath:中的逻辑代码移动到新方法(switchSection)并在展开的部分调用它以折叠它,然后展开新部分。请注意,您不再需要expandedSections设置,因为您只展开了一个部分。

NSUInteger expandedSection; /// Define this instead of expandedSections

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    if ([self tableView:tableView canCollapseSection:indexPath.section]) {
        if (!indexPath.row) {
            NSInteger section = indexPath.section;
            BOOL currentlyExpanded = (expandedSection == section);

            /// Collapse expanded section
            if (expandedSection >= 0) {
                [self switchSection:expandedSection];
            }

            /// Expand the new section if needed
            if (!currentlyExpanded) {
                [self switchSection:section];
            }
        }
    }
}

- (void)switchSection:(NSInteger)section {
    BOOL currentlyExpanded = (expandedSection == section);
    NSInteger rows;
    NSMutableArray *tmpArray = [NSMutableArray array];

    if (currentlyExpanded) {
        expandedSection = -1;
        rows = [self tableView:tableView numberOfRowsInSection:section];
    } else {
        expandedSection = 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];
    }
}

答案 1 :(得分:0)

Apple提供了一个示例代码。这是链接TVAnimationGestures

但是它有一个小错误请参考post