UITableView的单元格不能作为设置工作

时间:2014-04-28 15:26:21

标签: ios objective-c uitableview

我将uitableview的单元格设置如下

 - (UITableViewCell *)tableView:(UITableView *)tableView
     cellForRowAtIndexPath:(NSIndexPath *)indexPath
 {
   static NSString *CellIdentifier = @"Cell";
   DetailCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
  if (cell == nil) {
     cell = [[DetailCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
  }

if (indexPath.row == 0) {
    cell.backgroundColor = [UIColor redColor];
    UIImageView *bigphoto = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 320, 320)];
    bigphoto.image = [UIImage imageNamed:@"bigphoto.png"];
    [cell addSubview:bigphoto];
}
else {
    cell.backgroundColor = [UIColor blackColor];
    cell.myphoto.image = [UIImage imageNamed:@"myphoto.png"];
    cell.phototime.text = @"2014-03-01";
}

 return cell;
}

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
   if (indexPath.row == 0) {
      return 320;
  }
  return 220;
}

我希望第一个单元格(indexPath.row = 0)与其他单元格不同,第一个单元格设置为bigphoto,背景颜色为红色(使用UI设计),其他为myphoto.png,背景为黑色(使用DetailCell的UI Desigin),但代码运行错误,

第一个单元格(indexPath.row = 0)是正确的,但indexPath.row = 3或6或9 ..与indexPath.row = 0相同,不像indexPath.row = 1或2或4 ...

所以我该如何解决这个问题呢?感谢

3 个答案:

答案 0 :(得分:1)

这是因为第一个单元格被“重用”。由于您将这些单元格用于两个单独的目的,因此在故事板中创建原型单元格,而不是仅用于第一行,然后以其他方式重用其他行的单元格,这样会更加清晰。

答案 1 :(得分:1)

正在重复使用该单元格,您应该为具有不同表示形式的单元格使用不同的单元格标识符。这应该有效:

- (UITableViewCell *)tableView:(UITableView *)tableView
cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
  NSString *CellIdentifier;
  DetailCell *cell = nil;
  if (indexPath.row == 0) {
    cellIdentifier = @"Cell0";
    cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
      cell = [[DetailCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
      cell.backgroundColor = [UIColor redColor];
      UIImageView *bigphoto = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 320, 320)];
      bighoto.tag = 1;
      [cell addSubview:bigphoto];
    }
    UIImageView *bigphoto = (UIImageView *)[cell viewWithTag:1];
    bigphoto.image = [UIImage imageNamed:@"bigphoto.png"];
  }
  else {
    cellIdentifier = @"Cell1";
    cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
      cell = [[DetailCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
      cell.backgroundColor = [UIColor blackColor];
    }
    cell.myphoto.image = [UIImage imageNamed:@"myphoto.png"];
    cell.phototime.text = @"2014-03-01";
  }
  return cell;
}

答案 2 :(得分:0)

在您的情况下,最佳选择是使用静态tabelViewCells。请查看此link