顶级展开折叠自定义单元格tableview和扩展单元格必须是iOS目标c中的动态高度

时间:2017-10-27 10:28:55

标签: ios objective-c

如何在顶层展开折叠自定义单元格tableview并展开单元格必须是iOS目标c中的动态高度? 单击单元格时具有自定义tableview单元格的viewcontroller,单元格必须展开/折叠,具有一个视图并在该视图中显示数据,高度必须是动态的

2 个答案:

答案 0 :(得分:0)

您必须维护自定义表格视图单元格的状态(展开/未展开)。每次点击它都会在UI中进行必要的更改并切换状态。然后你可以打电话

reloadData() 

-(void)reloadRowsAtIndexPaths:(NSArray<NSIndexPath *> *)indexPaths 
          withRowAnimation:(UITableViewRowAnimation)animation;

您还可以计算和设置单元格的新高度,重新加载函数将处理动画。

答案 1 :(得分:0)

您使用了tableview,然后轻松管理展开和折叠自定义单元格tableview并使用动画进行扩展。

按照扩展和折叠的代码。

.h文件

BOOL currentlyExpanded;
NSMutableIndexSet *expandedSections;

.m文件

- (void)viewDidLoad
{
  if (!expandedSections)
  {
      expandedSections = [[NSMutableIndexSet alloc] init];
  }
}

使用Tableview委托和数据源方法..

#pragma mark - Tableview Delegate -

- (BOOL)tableView:(UITableView *)tableView canCollapseSection:(NSInteger)section
{
    return YES;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    if ([self tableView:tableView canCollapseSection:section])
    {
       if ([expandedSections containsIndex:section])
         return 6;  //return your array count..
       else
         return 1;
    }
     return 1;
 }

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
      static NSString *MyIdentifier = @"MyIdentifier";

      UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:MyIdentifier];

      if (cell == nil) {
            cell = [[UITableViewCell alloc] 
            initWithStyle:UITableViewCellStyleDefault reuseIdentifier:MyIdentifier]
            ;
      }
      if ([self tableView:tableView canCollapseSection:indexPath.section])

       {
          //Display your dynamic cell contain.. 
       }
   return cell;
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    if ([self tableView:tableView canCollapseSection:indexPath.section])

     {
            NSInteger section = indexPath.section;
             currentlyExpanded = [expandedSections containsIndex:section];
             NSInteger rows;

              if (currentlyExpanded)
              {
                  rows = [self tableView:tableView numberOfRowsInSection:section];
                [expandedSections removeIndex:section];

              }
              else
              {

                  [expandedSections addIndex:section];
                  rows = [self tableView:tableView numberOfRowsInSection:section];
              }

        // Animation when cell expand and collapse 

            if(currentlyExpanded)
            {
                [tableView deleteRowsAtIndexPaths:tmpArray
                                 withRowAnimation:UITableViewRowAnimationTop];

                CGFloat startRadians, endRadians;
                startRadians = M_PI/2;
                endRadians = 0.0f;

                btnArrow.layer.affineTransform = CGAffineTransformMakeRotation(startRadians);

                [UIView animateWithDuration:0.3f animations:^{
                    btnArrow.layer.affineTransform = CGAffineTransformMakeRotation(endRadians);
                }completion:^(BOOL finished){
                }];


            }
            else
            {
                [tableView insertRowsAtIndexPaths:tmpArray
                                 withRowAnimation:UITableViewRowAnimationTop];

                [UIView animateWithDuration:0.3 delay:0 options:UIViewAnimationOptionCurveLinear animations:^{
                    [btnArrow setTransform:CGAffineTransformRotate(btnArrow.transform, M_PI/2 )];
                }completion:^(BOOL finished){
                }];

            }
     }
 }