需求:点击一行cell-1,在其下方插入一个新的cell(datePicker)来选择时间。
在 -cellForRowAtIndexPath 方法中加入判断,对不同行显示内容进行设置,同时设置布尔变量isVisible对显示和隐藏状态进行控制。
点击cell-1时,调用showDatePicker 方法, isVisible = YES, 并显示cell,显示cell 有两种实现方式,一种是直接[tableView reloadData]; 因为在 cellForRow 和 numberOfRows 两个方法中,都对cell进行了设置。 另一种方法调用 reloadRowsAtIndexPath 和 insertRowsAtIndexPath如下:
- (void)showDatePicker {
_datePickerVisible = YES;
NSIndexPath *indexPathDatePicker = [NSIndexPath indexPathForRow:2 inSection:1];
[self.tableView beginUpdates];
[self.tableView insertRowsAtIndexPaths:@[indexPathDatePicker] withRowAnimation:UITableViewRowAnimationFade];
UITableViewCell *datePickerCell = [self.tableView cellForRowAtIndexPath:indexPathDatePicker];
[self.tableView reloadRowsAtIndexPaths:@[indexPathDateRow] withRowAnimation:UITableViewRowAnimationNone];
[self.tableView endUpdates];
UIDatePicker *datePicker = (UIDatePicker *)[datePickerCell viewWithTag:100];
[datePicker setDate:_dueDate animated:NO];
}
这种方式可以对显示过程添加动画,并且在行数较多时,节省系统资源。