这看起来很简单,但到目前为止我无法找到解决方案。
基本上我有一个带有两个选项的分段控件。第一个是默认值(并在加载时自动显示),选中后会显示表格视图中的所有行。第二个是限制显示行的过滤器。这与iPhone手机应用程序的“最近”标签上使用的设置完全相同,可以过滤“全部”和“未接来电”。
目前我从两个不同的阵列加载数据。问题是,当我交换数据时,没有动画来表示已经过滤了行。 Apple已经在他们的手机应用程序中实现了这一点,但我认为没有办法实现这一点。
当用户在两种状态之间切换时,也许需要删除并重新添加每个单元格 - 或者将我希望隐藏的单元格的高度设置为0会产生相同的效果?有没有人有制作这种手风琴型动画的经验?
我查看了here的一些线索,但是在滚动一些有效的代码时遇到了问题。有没有人以前实现过这个?如果是这样,你是如何让它工作的?
答案 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...
}