0

这似乎很简单,但到目前为止我还找不到解决方案。

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

目前我从两个不同的数组加载数据。问题是,当我交换数据时,没有动画表示行已被过滤。苹果已经在他们的电话应用程序中实现了这一点,但我看不出有什么办法实现这一点。

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

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

4

2 回答 2

1

您可以通过使用动画在您的表格视图上调用deleteRowsAtIndexPaths:withRowAnimation:和来实现类似的效果。insertRowsAtIndexPaths:withRowAnimation:UITableViewRowAnimationFade

于 2010-09-03T05:11:13.343 回答
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...
}
于 2012-08-03T22:11:07.443 回答