如何在UISegmentedControl按钮之间切换时为表视图单元设置动画?

时间:2011-08-22 05:26:36

标签: iphone animation uitableview uisegmentedcontrol

我的应用程序如下图所示

enter image description here enter image description here

我的分段控件中有3个按钮。假设点击“部门”按钮将显示3个部门&按“名称”按钮将显示6个名称。

我按照以下步骤进行此操作..

  1. 通过此代码创建UISegmentedControl

    segmentedControl = [[UISegmentedControl alloc] initWithItems:[NSArray arrayWithObjects:@"Department", @"Name", @"ID",nil]];  //Initialize Segmented Control
    
    segmentedControl.segmentedControlStyle = UISegmentedControlStyleBar; //Define bar type (optional)
    
    segmentedControl.selectedSegmentIndex = 0; //Define default clicked button
    
    [segmentedControl addTarget:self action:@selector(segmentClicked) forControlEvents:UIControlEventValueChanged];  //Set target and define which method should called when tapping buttons
    
    self.navigationItem.titleView = segmentedControl; //To add UISegmented Control in the title of the navigation bar
    
  2. 为UISegmented Control定义方法(segmentClicked

    segment = segmentedControl.selectedSegmentIndex;
    
    if (segment==0) {
        //Do something for Department tab
        [self.tableView reloadData];
    }
    
    else if (segment==1) {
        //Do something for Name tab
        [self.tableView reloadData];
    }
    
    else {
        //Do something for ID tab
        [self.tableView reloadData];
    }
    
  3. 参考tableView: cellForRowAtIndexPath:方法中的段值创建单元格。 (这样我们就可以为每个UISegmentedControl按钮获取各种单元格)

    if (segment == 0) {
    
        cell.textLabel.text = [listOfDepartments objectAtIndex:indexPath.section]; //listOfDepartments is the NSMutableArray that contains list of Departments names
    
    }
    
    else if (segment == 1) {
    
        cell.textLabel.text = [listOfNames objectAtIndex:indexPath.section];  //listOfNames is the NSMutableArray that contains list of person names
    
    }
    
    else {
    
        cell.textLabel.text = [listOfIDs objectAtIndex:indexPath.section];  //listOfIDs is the NSMutableArray that contains list of person ID's
    
    }
    
    return cell;
    
  4. 所以,最后我得到了上图所示的视图。

    当我按下UISegmentedControl按钮时,表格视图会重新加载其单元格&完美地显示相应的值。默认情况下,选择“部门”按钮。如果我点击“名称”按钮(即表格将显示6个单元格而不是3个单元格),表格会立即更改,不会显示任何动画。它只隐藏3个部门名称单元格,并显示6个单元格,显示没有任何动画的人名。我无法找到一种方法来使平滑动画更改单元格。

    我应该实现什么来实现流畅的动画?

    先谢谢

3 个答案:

答案 0 :(得分:0)

使用insertRowsAtIndexPaths:withRowAnimation:deleteRowsAtIndexPaths:withRowAnimation:方法,这些方法可以指定一些内置炫酷动画。

typedef enum {
    UITableViewRowAnimationFade,
    UITableViewRowAnimationRight,    
    UITableViewRowAnimationLeft,
    UITableViewRowAnimationTop,
    UITableViewRowAnimationBottom,
    UITableViewRowAnimationNone,        
    UITableViewRowAnimationMiddle,      
} UITableViewRowAnimation;

答案 1 :(得分:0)

使用方法reloadSections:withRowAnimation:

如果您只有一个部分,则将[NSIndexSet indexSetWithIndex:0]作为上述方法中的第一个参数传递。在第二个参数中,您可以选择动画类型。

答案 2 :(得分:0)

尝试可能会有所帮助:

[self.tableView beginUpdates];
[self.tableView endUpdates];

segmentClicked方法中,而不是[self.tableView reloadData];

这些方法有时可以更好地动态表变化。