ios - 像Twitter应用程序一样扩展表格视图单元格

时间:2013-02-19 21:22:57

标签: ios animation twitter uitableview

我希望在选择推文时与Twitter应用程序具有相同的行为:扩展行并添加补充内容。

所以这不仅仅是一个基本的行调整大小。我想我需要两个不同的自定义单元格,所以我做了类似的事情:

 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    if ([indexPath compare:self.selectedIndexPath] != NSOrderedSame) {
        FirstCell *cell = [tableView dequeueReusableCellWithIdentifier:@"FirstCell"];
        if (!cell) {
            cell = [[FirstCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"FirstCell"];
        }

        cell.firstnameLabel.text = [[self.items objectAtIndex:indexPath.row] objectForKey:@"firstname"];

        return cell;
    }
    else {
        SecondCell *cell = [tableView dequeueReusableCellWithIdentifier:@"SecondCell"];
        if (!cell) {
            cell = [[SecondCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"SecondCell"];
        }

        cell.firstnameLabel.text = [[self.items objectAtIndex:indexPath.row] objectForKey:@"firstname"];
        cell.lastnameLabel.text = [[self.items objectAtIndex:indexPath.row] objectForKey:@"lastname"];

        return cell;
    }

}


- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
    if ([indexPath compare:self.selectedIndexPath] == NSOrderedSame) {
        return 80.0;
    } else {
        return 44.0;
    }
}

#pragma mark - Table view delegate

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    self.selectedIndexPath = indexPath;

    [tableView reloadData];
}

我的问题在于我想保留像Twitter应用程序这样的流畅动画,因为[tableView reloadData]而不是我的情况(这是强制性的,我认为因为我有2个不同的自定义单元格)。

所以任何人都知道我需要的解决方法或者有人知道Twitter应用程序如何处理这个动画的东西?

3 个答案:

答案 0 :(得分:7)

您想要使用动画重新加载该单元格:

[tableView beginUpdates];
[tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
[tableView endUpdates];

答案 1 :(得分:3)

[tableView beginUpdates];
[tableView endUpdates];

这会触发整个tableView的单元格行大小的更新....引自:iPhone - Smooth animation for UITableViewCell height change including content update

快乐的编码!

答案 2 :(得分:1)

通过将原始代码与rooster117的解决方案结合起来,使用两个自定义单元格实现这一点实际上相当容易。将[tableView reloadData]中的tableView:didSelectRowAtIndexPath:替换为:

[tableView beginUpdates];
[tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationAutomatic];
[tableView endUpdates];

你应该有你的解决方案。