定义一个属性记录selectedIndexPath用来记录选中的行的indexpath,在视图控制器初始化方法中初始化此属性为nil, 在tableView:didSelectRowAtIndexPath代理方法中: 首先deselect这个行 然后[tableView beginUpdate] if(selectedIndexPath==nil) { selectedIndexPath=indexPath; [tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationAutomatic]; } else{ bool hasSelectedOtherRow=![self.selectedIndexPath isEqualTo:indexPath]; NSIndexPath *temp=self.selectedIndexPath; self.selectedIndexPath=nil; [tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:temp] withRowAnimation:UITableViewRowAnimationAutomatic]; if(hasSelectedOtherRow){ self.selectedIndexPath=indexPath; [tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationAutomatic]; } } [tableView endUpdate]; 在返回行高的代理方法中,如果indexPath等于self.selectedIndexPath, 返回一个特定的高度,否则返回缺省单元格高度。 在返回单元的代理方法中,如果indexPath等于self.selectedIndexPath,返回一个定制的单元(这个特定单元可以在视图控制器的viewdidload方法中初始化,不需要重用)否则返回缺省单元。
来源:https://www.cnblogs.com/kiss007/archive/2012/07/02/2572665.html