UITableView中Cell点击展开方法

定义一个属性记录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方法中初始化,不需要重用)否则返回缺省单元。
posted @ 2012-07-02 09:13  我的程序人生  阅读(7777)  评论(2编辑  收藏  举报