根据内容更改单个UITableViewCell的外观

时间:2013-09-26 14:53:41

标签: iphone ios objective-c uitableview

我在使用自定义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;
}

as you can see from the picture that begins with the cell - is smallest and the text is moved to the left, in the next cell is all right, but in the last cell text spostasto but it should not!

从单元格开头的图片中可以看到

是最小的,文本向左移动,在下一个单元格中是正确的,但是最后一个单元格中的文本被移动了,但不应该移动! / p>

感谢所有

2 个答案:

答案 0 :(得分: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;
    }

}

答案 1 :(得分: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
}

BTW - 您可以将[[try substringToIndex:1]isEqualToString:@"-"]替换为[try hasPrefix:@"-"]