显示和隐藏自定义单元格

时间:2013-09-23 03:06:22

标签: objective-c uitableview hide show

我的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时,它只会使最后一个单元格闪烁。

1 个答案:

答案 0 :(得分:0)

通过考虑,tableview中总共有6行,只有一个部分,为了更好,你创建一个可变数组来保存你的tableview的所有对象,然后使用insertRowsAtIndexPaths: withRowAnimation:deleteRowsAtIndexPaths: withRowAnimation:代替使用选择器跟随代码给出了如何隐藏和显示tableview单元格的示例


 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];
 }
}


如果所有ur单元格都是自定义的,那么就不需要使用-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath方法

希望这有助于你:)