使用动画过滤UITableViewCells - iPhone开发

时间:2010-09-02 15:02:04

标签: iphone animation uitableview filter uisegmentedcontrol

这看起来很简单,但到目前为止我无法找到解决方案。

基本上我有一个带有两个选项的分段控件。第一个是默认值(并在加载时自动显示),选中后会显示表格视图中的所有行。第二个是限制显示行的过滤器。这与iPhone手机应用程序的“最近”标签上使用的设置完全相同,可以过滤“全部”和“未接来电”。

目前我从两个不同的阵列加载数据。问题是,当我交换数据时,没有动画来表示已经过滤了行。 Apple已经在他们的手机应用程序中实现了这一点,但我认为没有办法实现这一点。

当用户在两种状态之间切换时,也许需要删除并重新添加每个单元格 - 或者将我希望隐藏的单元格的高度设置为0会产生相同的效果?有没有人有制作这种手风琴型动画的经验?

我查看了here的一些线索,但是在滚动一些有效的代码时遇到了问题。有没有人以前实现过这个?如果是这样,你是如何让它工作的?

2 个答案:

答案 0 :(得分:1)

您可以使用deleteRowsAtIndexPaths:withRowAnimation:动画在表格视图上调用insertRowsAtIndexPaths:withRowAnimation:UITableViewRowAnimationFade来完成类似的效果。

答案 1 :(得分:0)

你有没有看过reloadSections:withRowAnimation:

基本思想是调用reloadSections:withRowAnimation:并在你的UITableViewDataSource实现中切换分段控件的selectedSegmentIndex。

假设您的数据是平的(只有一个部分),它看起来像这样:

- (IBAction)segmentSwitch:(id)sender
{
    [self.tableView reloadSections:[NSIndexSet indexSetWithIndex:0] withRowAnimation:UITableViewRowAnimationFade];
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    switch (self.segmentedControl.selectedSegmentIndex)
    {
        default:
        case 0:
            return [self.allRows count];
        case 1:
            return [self.onlySomeRows count];
    }
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    id data;
    switch (self.segmentedControl.selectedSegmentIndex)
    {
        default:
        case 0:
            data = [self.allRows objectAtIndex:[indexPath row]];
            break;
        case 1:
            data = [self.onlySomeRows objectAtIndex:[indexPath row]];
            break;
    }

    //TODO: use data to populate and return a UITableViewCell...
}