tableView实现就像在appStore上一样

时间:2014-02-04 08:47:53

标签: ios uitableview ios7

enter image description here

enter image description here

基本上我的观点是我有customTableViewCell,它最右边有一个按钮(与image1“show version history”相同)。当我点击它时,我想添加一个动态数量的subviewCell,它位于customTableViewCells下。

我的问题是,这是如何实施的?你有什么图书馆可以参考吗?

3 个答案:

答案 0 :(得分:1)

答案 1 :(得分:1)

答案 2 :(得分:1)

这很容易。

  • 您想要跟踪该部分是否已展开。为此
  • 使用实例变量(或属性)
  • 如果未展开,则在tableView:numberOfRowsInSection:中为可展开部分
  • 返回1
  • 如果展开,则返回1 + t:numberOfRowsInSection:
  • 中展开的单元格数
  • tableView:didSelectRowAtIndexPath:中,您在点击第一个单元格时切换展开状态,然后插入或删除展开的行。

例如:

@interface MBMasterViewController () {
    BOOL firstSectionExpanded;
}
@end

@implementation MBMasterViewController

#pragma mark - Table View

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    return 3;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    NSInteger count = 1;
    if (section == 0 && firstSectionExpanded) { count = 3; }
    return count;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath];
    if (indexPath.row == 0) {
        cell.textLabel.text = [NSString stringWithFormat:@"Section %ld", (long)indexPath.section];
    }
    else {
        cell.textLabel.text = [NSString stringWithFormat:@"Sub Cell %ld", (long)indexPath.row];
    }
    return cell;
}

- (NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    if (indexPath.row != 0) {
        // don't select sub cells
        return nil;
    }
    return indexPath;
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    NSArray *cells = @[ [NSIndexPath indexPathForRow:1 inSection:indexPath.section],
                        [NSIndexPath indexPathForRow:2 inSection:indexPath.section]];

    NSArray *cellsToDelete;
    NSArray *cellsToInsert;
    if (indexPath.section == 0) {
        if (firstSectionExpanded) {
            cellsToDelete = cells;
        }
        else {
            cellsToInsert = cells;
        }
        firstSectionExpanded = !firstSectionExpanded;
    }

    if (cellsToDelete) {
        [tableView deleteRowsAtIndexPaths:cellsToDelete withRowAnimation:UITableViewRowAnimationAutomatic];
    }
    if (cellsToInsert) {
        [tableView insertRowsAtIndexPaths:cellsToInsert withRowAnimation:UITableViewRowAnimationAutomatic];
    }
    [tableView deselectRowAtIndexPath:indexPath animated:YES];
}