滚动UITableView时,单元格消失并重新出现

时间:2015-02-10 11:08:37

标签: ios xcode uitableview

我的UITableView有一些奇怪的行为。当我上下滚动时,有时底行会消失并再次消失。不知道为什么会这样。我的每个UITableCell都包含4个按钮,如下所示:

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

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell" forIndexPath:indexPath];

    int x,y;
    x=5;
    y=0;
    for(int i = (int)indexPath.row*4; i<(int)indexPath.row*4+4; i++) {


        //make sure we don't hit a blank in the array
        if(i<[self.buttons count]) {

            UIButton *button = [[UIButton alloc] init];
            button = self.buttons[i];
            button.layer.cornerRadius = button.frame.size.width / 2;
            button.clipsToBounds = YES;
            [button setFrame:CGRectMake(x, y, 70, 70)];
            [cell.contentView addSubview:button];
            x+=80;

        }


    }



    return cell;

}

这可能是因为我为每个单元格都有相同的单元格重用标识符吗?它需要是独一无二的吗?

4 个答案:

答案 0 :(得分:1)

在此代码中:

UIButton *button = [[UIButton alloc] init];
button = self.buttons[i];

分配并初始化按钮,然后将变量重新分配给按钮数组的条目i。这意味着什么呢?

您还要将按钮添加到单元格内容中作为子视图。滚动时可以重复使用单元格,因此您可以轻松地向给定单元格添加4个以上的按钮,这将导致您显示问题。当您将单元格出列时,它可能已经有4个按钮。

你能否在单元原型中只有4个按钮,在代码中省去了所有这些工作。

答案 1 :(得分:0)

不,对于tableView,单元重用标识符必须常量。但是你应该使用is作为静态变量。

更改为static NSString *cellID = [NSString stringWithFormat:@"cellID",indexPath.row];而非。{ NSString *cellID = [NSString stringWithFormat:@"cell%d",indexPath.row];

您还在willDisplayCelldidEndDisplayingCell委托方法中进行了任何更改。如果是,Plz也会发布该代码。

答案 2 :(得分:0)

像这样重写:

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

  UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell" forIndexPath:indexPath];
  if (cell.contentView.subviews.count == 0) {

    int x,y;
    x=5;
    y=0;
    for (int i = 0; i < 4; i++) {

        UIButton *button = [[UIButton alloc] init];
        button = self.buttons[i];
        button.layer.cornerRadius = button.frame.size.width / 2;
        button.clipsToBounds = YES;
        [button setFrame:CGRectMake(x, y, 70, 70)];
        [cell.contentView addSubview:button];
        x+=80;
      }
    }
  return cell;
}

答案 3 :(得分:0)

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *cellIdentifier=@"cell";
    UITableViewCell *cell=[tableView dequeueReusableCellWithIdentifier:cellIdentifier];

    if (cell==nil)
    {
        cell=[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:cellIdentifier];

return cell;

    }
}