打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
点击UITableView的cell展开收缩
   在项目中有个需求,点击表视图的单元格展开,再点击另外一个单元格或者本身又收缩,经过一段时间尝试,实现了该功能,现在记录分享总结下。
  首先要理解UITableView代理方法调用的先后顺序。
  当初始化UITableView后,代理回调顺序如下
  1://返回cell个数
- (NSInteger)tableView:(UITableView *)tableViewnumberOfRowsInSection:(NSInteger)section
  2://返回每行的高度
- (CGFloat)tableView:(UITableView *)tableViewheightForRowAtIndexPath:(NSIndexPath *)indexPath
  3://请求数据元代理为tableView插入需要的cell
- (UITableViewCell *)tableView:(UITableView *)tableViewcellForRowAtIndexPath:(NSIndexPath *)indexPath
  4://监听点击的cell
- (void)tableView:(UITableView *)tableViewdidSelectRowAtIndexPath:(NSIndexPath *)indexPath

  需要声明一个全局BOOL变量isOpen,记录当前cell的状态,声明一个NSInterge类型selectedIndex,记录选择的cell的row。


  在heightForRowAtIndexPath代理里面实现//选中状态返回的高度
    if(indexPath.row == selectedIndex.row && selectedIndex != nil) {
       if (isOpen == YES) {

          //cell上的label高度自适应
           CGSize size = [textStr sizeWithFont:[UIFont systemFontOfSize:14]constrainedToSize:CGSizeMake(290, 1000)lineBreakMode:NSLineBreakByWordWrapping];
           CGFloat f = size.height;
           
           if (indexPath.row == [self.dataArr count]-1){
               
               return 153.8+(f - 21);
           }
           
           return 155+(f - 21);
           
       }else{
           
           return 67;
       }
       
    }


同样在- (UITableViewCell *)tableView:(UITableView *)tableViewcellForRowAtIndexPath:(NSIndexPath *)indexPath里实现一样的条件
    if(indexPath.row == selectedIndex.row && selectedIndex !=nil) {
       //如果是展开
       if (isOpen == YES) {
           //xxxxxx
    }else{
           //收起
     }
      
      //不是自身
    } else{
      }


当点击时候在- (void)tableView:(UITableView *)tableViewdidSelectRowAtIndexPath:(NSIndexPath *)indexPath{
//将索引加到数组中
    NSArray*indexPaths = [NSArray arrayWithObject:indexPath];
   //判断选中不同row状态时候
   //    if(self.selectedIndex != nil && indexPath.row !=selectedIndex.row) {
    if(self.selectedIndex != nil && indexPath.row ==selectedIndex.row) {
       //将选中的和所有索引都加进数组中
//       indexPaths = [NSArray arrayWithObjects:indexPath,selectedIndex,nil];
       isOpen = !isOpen;
       
    }else if(self.selectedIndex != nil && indexPath.row !=selectedIndex.row) {
       indexPaths = [NSArray arrayWithObjects:indexPath,selectedIndex,nil];
       isOpen = YES;
     
    }
    
   //记下选中的索引
   self.selectedIndex = indexPath;
   
    //刷新
    [tableViewreloadRowsAtIndexPaths:indexPathswithRowAnimation:UITableViewRowAnimationFade];
}

经过不断调试,终于实现了点击任意一个cell展开收缩效果



评论
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
stupid教程
iOS App开发中使用及自定义UITableViewCell的教程
iPhone UITableView
可折叠视图
UITableview 单选和重用
UITableView 实现Cell删除操作
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服