1

我对带有自定义 UITableViewCell 的 UITableView 有疑问。该表由 NSArray 填充,我希望如果此 NSArray 中的对象以 - 开头,则更改其外观。

问题在于以 - 开头的 UITableViewCell 已更改,但也会更改其他不应更改的单元格。

这是我的代码:

  //this is the way in which change the height of the cell if the object in the array begins with -
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {

NSString *try = [arrayTitleEs objectAtIndex:indexPath.row];

if ([[try substringToIndex:1]isEqualToString:@"-"]) {

    return 45;

}

else return 160;
}


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

  static NSString *CellIdentifier = @"CellCardioScheda";
  CardioSchedaCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];

   cell.titleEs.text = [arrayTitoloEs objectAtIndex:indexPath.row];

  NSString *try = [arrayTitoloEs objectAtIndex:indexPath.row];

if ([[try substringToIndex:1]isEqualToString:@"-"]) {

    cell.titleEs.frame = CGRectMake(0, 0, cell.frame.size.width-15, cell.frame.size.height);
}


 return cell;
}

正如您从以单元格开头的图片中看到的那样 - 最小并且文本向左移动,在下一个单元格中是可以的,但在最后一个单元格中的文本 spostasto 但它不应该!

正如您从以单元格开头的图片中看到的那样 - 最小并且文本向左移动,在下一个单元格中是可以的,但是最后一个单元格中的文本被移动了,但不应该!

谢谢大家

4

2 回答 2

1

您可以创建两种不同类型的单元格并根据cellForRowAtIndexPath需要返回一种或另一种:

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

    UITableViewCell *firstCell = [tableView dequeueReusableCellWithIdentifier:@"firstCellID"];

    if (firstCell == nil) {
        firstCell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"firstCellID"] autorelease];
    }

    // Set here firstCell

    UITableViewCell *secondCell = [tableView dequeueReusableCellWithIdentifier:@"secondCellID"];

    if (secondCell == nil) {
        secondCell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"secondCellID"] autorelease];
    }

    // Set here secondCell

    if ([[try substringToIndex:1]isEqualToString:@"-"]) {
        return secondCell;
    } else {
        return firstCell;
    }

}
于 2013-09-26T15:08:11.797 回答
0

问题出在以下几点:

if ([[try substringToIndex:1]isEqualToString:@"-"]) {
    cell.titleEs.frame = CGRectMake(0, 0, cell.frame.size.width-15, cell.frame.size.height);
}

else如果不满足条件,您需要正确设置框架。细胞被重复使用。你对一个细胞所做的任何事情都必须对所有细胞都做。

if ([[try substringToIndex:1]isEqualToString:@"-"]) {
    cell.titleEs.frame = CGRectMake(0, 0, cell.frame.size.width-15, cell.frame.size.height);
} else {
    cell.titleEs.frame = CGRectMake(...); // whatever regular cells should be
}

顺便说一句-您可以替换[[try substringToIndex:1]isEqualToString:@"-"][try hasPrefix:@"-"].

于 2013-09-26T15:19:59.290 回答