Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用动画过滤UITableViewCells-iPhone开发_Iphone_Animation_Uitableview_Filter_Uisegmentedcontrol - Fatal编程技术网

使用动画过滤UITableViewCells-iPhone开发

使用动画过滤UITableViewCells-iPhone开发,iphone,animation,uitableview,filter,uisegmentedcontrol,Iphone,Animation,Uitableview,Filter,Uisegmentedcontrol,这似乎很简单,但到目前为止,我还无法找到解决办法 基本上我有一个分段控件,有两个选项。第一个是默认值(并在加载时自动显示),选中此选项后,将显示表视图中的所有行。第二个是限制显示行的过滤器。这与iPhone手机应用程序的“最近”选项卡上使用的设置完全相同,该选项卡用于过滤“所有”和“未接”电话 目前,我从两个不同的阵列加载数据。问题是,当我交换数据时,没有动画表示行已被过滤。苹果已经在他们的手机应用程序中实现了这一点,但我看不到实现这一点的方法 当用户在这两种状态之间切换时,可能需要删除并重新添

这似乎很简单,但到目前为止,我还无法找到解决办法

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

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

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


我已经寻找了一些线索,但是在运行一些有效的代码时遇到了问题。以前有人实施过吗?如果是这样,您是如何使其工作的?

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

您查看了吗

基本思想是调用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...
}