是否有可能不在UITableView中重用特定的单元格?

时间:2014-07-10 11:51:15

标签: ios objective-c uitableview

我想在UITableView的第一行中添加一些特殊效果,但是当我向下滚动表格视图时,它还带有其他单元格(因为单元格可重用性?)。那么有什么方法可以阻止任何特定的单元重用?我尝试将nil作为第一个单元格的reusableIndentifier传递,但它给了我错误(插入失败)。

我在viewDidApper方法中为第一行的某些动画调用此方法 -

-(void)openSubmenuForFirstRow{

    stIndex = 0;
    UITableViewCell* cell = [self.tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:1 inSection:0]];
    StoreCell* sCell = (StoreCell *)cell;

    UIView* mainView = [sCell viewWithTag:101];
    UIView* subView = [sCell viewWithTag:102];

    [UIView animateWithDuration:0.3 animations:^{

        CGRect rect = subView.frame;
        rect.origin.x = 0;
        subView.frame = rect;

        CGRect mainViewRect = mainView.frame;
        mainViewRect.origin.x = 117;
        mainView.frame = mainViewRect;
    }];

}

但是当我滚动表视图时,我在其他几个单元格上得到了这个动画。 任何帮助或建议将不胜感激。

3 个答案:

答案 0 :(得分:2)

您可以使用两个单元格CellIdentifires。一个是第一行,第二个是第二行。检查indexPath.row。如果为0,则使用cellidentifier1,否则使用cellidentifier2。

将它用于第一行:

 UITableViewCell* cell;
 if(indexPath.row == 0){
        cell = [tableView dequeueReusableCellWithIdentifier:@"Cell1"];
 }
 else{
        cell = [tableView dequeueReusableCellWithIdentifier:@"Cell2"];
 }
 if (cell == nil) {
      if(indexPath.row == 0){
             cell = [[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:@"Cell1"];
      }
      else{
           cell = [[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:@"Cell2"];
      }
 } 

答案 1 :(得分:0)

只有在显示第一个单元格时才能显示菜单。从viewDidAppear移除呼叫并添加此方法:

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {

    if (indexPath.row == 0) {
        [self openSubmenuForCell: cell];
    }
}

您还需要更改方法,如下所示:

- (void)openSubmenuForCell: (UITableViewCell*)cell {

    stIndex = 0;
    StoreCell* sCell = (StoreCell *)cell;

    UIView* mainView = [sCell viewWithTag:101];
    UIView* subView = [sCell viewWithTag:102];

    [UIView animateWithDuration:0.3 animations:^{

        CGRect rect = subView.frame;
        rect.origin.x = 0;
        subView.frame = rect;

        CGRect mainViewRect = mainView.frame;
        mainViewRect.origin.x = 117;
        mainView.frame = mainViewRect;
    }];

}

答案 2 :(得分:0)

将此代码用于寄存器单元格:

 NSString *CellIdentifier = @"CustomCell";
    CustomCell  *cell = (CustomCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    if (cell == nil) {
        cell = [[[NSBundle mainBundle] loadNibNamed:@"CustomCell" owner:self options:nil] objectAtIndex:0];
    }

并且objectAtIndex是您的自定义单元格标记。