我在使用自定义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;
}
从单元格开头的图片中可以看到
是最小的,文本向左移动,在下一个单元格中是正确的,但是最后一个单元格中的文本被移动了,但不应该移动! / p>
感谢所有
答案 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:@"-"]
。