我的应用程序如下图所示
我的分段控件中有3个按钮。假设点击“部门”按钮将显示3个部门&按“名称”按钮将显示6个名称。
我按照以下步骤进行此操作..
通过此代码创建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
为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];
}
参考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;
所以,最后我得到了上图所示的视图。
当我按下UISegmentedControl按钮时,表格视图会重新加载其单元格&完美地显示相应的值。默认情况下,选择“部门”按钮。如果我点击“名称”按钮(即表格将显示6个单元格而不是3个单元格),表格会立即更改,不会显示任何动画。它只隐藏3个部门名称单元格,并显示6个单元格,显示没有任何动画的人名。我无法找到一种方法来使平滑动画更改单元格。
我应该实现什么来实现流畅的动画?
先谢谢
答案 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];
这些方法有时可以更好地动态表变化。