0

我的 UITableView 有一个部分,如果所有单元格都可见,则总共有 6 个。

只有一个单元格我希望能够显示和隐藏。

这是一个概述:

单元格 0 - 始终显示

单元格 1 - 始终显示

单元格 2- 始终显示

单元格 3 - 始终显示

单元格 4 - 最初隐藏/如果点击单元格 3 将显示或隐藏

单元格 5 - 始终显示

这是我尝试通过 didSelectRowAtIndexPath 动画/显示单元格的示例。不确定我是否走在正确的轨道上,但如果有人可以看看并帮助我看看我在哪里搞砸了,我将不胜感激!

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    [tableView deselectRowAtIndexPath:indexPath animated:YES];

    if (indexPath.row == 3)
    {
        if (self.indexPathSelected != indexPath)
        {
            [tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:self.indexPathSelected.row+1 inSection:self.indexPathSelected.section]].hidden = YES;

            [tableView reloadSections:[NSIndexSet indexSetWithIndex:0] withRowAnimation:UITableViewRowAnimationTop];

            [tableView beginUpdates];

            [[tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:indexPath.row+1 inSection:indexPath.section]] performSelector:@selector(setHidden:) withObject:NO afterDelay:0.25];

            self.indexPathSelected = indexPath;

            [tableView endUpdates];

            return;
        }
    }
}

因此,当我点击单元格 3 时,它只会使最后一个单元格闪烁。

4

1 回答 1

0

通过考虑,tableview 中总共将有 6 行,只有一个部分,为了更好,你制作一个可变数组来保存你的 tableview 的所有对象,然后使用insertRowsAtIndexPaths: withRowAnimation:deleteRowsAtIndexPaths: withRowAnimation:不是使用选择器,下面的代码给出了如何隐藏和显示的示例表格视图单元格


 mutArray = [[NSMutableArray alloc]initWithObjects:@"cell 1",@"cell 2",@"cell 3",@"cell 4",@"cell 6", nil]; //initially ur array contains only 5 objects notice that "cell 5" is not  there this will be hidden

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
  {   
     return 1; 
  }

  - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
  {

     return [mutArray count];
  }

 -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{

   UITableViewCell *cell = [self.aTableView dequeueReusableCellWithIdentifier:@"cell"];
   if(mutArray.count != 6) //initially only 5 rows are present
   {
      if(cell == nil)
       {
        cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"cell"];

       }

    cell.textLabel.text = [mutArray objectAtIndex:indexPath.row];
    cell.textLabel.backgroundColor = [UIColor clearColor];
    return cell;
 }
  else //for 5th row it must be a custom cell
   {
     return [mutArray objectAtIndex:indexPath.row];//becz u are already initilised ur custom cell just return it
  }
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    [tableView deselectRowAtIndexPath:indexPath animated:YES];
    if(indexPath.row == 3)
  {
      int totalRows = [tableView numberOfRowsInSection:indexPath.section];

      [tableView beginUpdates];
      if(totalRows == 5)
       {
        //initilise ur custom cell and add it to datasource array
        CustomCell *customCell = [[CustomCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"customCell"];
        customCell.textLabel.text = @"cell 5";
        [mutArray insertObject:customCell atIndex:4];
        [tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:[NSIndexPath indexPathForItem:indexPath.row + 1 inSection:indexPath.section]] withRowAnimation:UITableViewRowAnimationFade];

      }
    else
      {
        [mutArray removeObjectAtIndex:5];
        [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:[NSIndexPath indexPathForItem:indexPath.row + 1 inSection:indexPath.section]] withRowAnimation:UITableViewRowAnimationFade];
     }
    [tableView endUpdates];
 }
}


如果您的所有单元格都是自定义的,则不需要在-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath方法中进行比较

希望这对你有帮助:)

于 2013-09-23T06:51:38.790 回答