我正在尝试仅在UITableView中的某些单元格中显示图像。这是我的configureCell方法:
-(void)configureCell:(UITableViewCell *)cell atIndexPath:(NSIndexPath *)indexPath {
StoryInfo *info = [self.fetchedResultsController objectAtIndexPath:indexPath];
UIImage *ribbon = [UIImage imageNamed:@"ribbon.png"];
UIImageView *ribbonView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 15, 15)];
[ribbonView setImage:ribbon];
[cell addSubview:ribbonView];
if([[NSNumber numberWithBool:NO] isEqualToNumber:info.visited]) {
cell.textLabel.textColor = [UIColor colorWithRed:53/255.0 green:53/255.0 blue:52/255.0 alpha:1];
ribbonView.hidden = NO;
}
else {
cell.textLabel.textColor = [UIColor colorWithRed:128.0/255.0 green:128.0/255.0 blue:128.0/255.0 alpha:1.0];
ribbonView.hidden = YES;
}
}
这是cellForRowAtIndexPath:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
// set up the cell...
[self configureCell:cell atIndexPath:indexPath];
return cell;
}
这不太有效,因为首先,所有单元格都将它们绘制RibbonView,而不管
info.visited
的值如何。我已经逐步了解了if / else,但是看到了隐藏代码。但是,如果我离开列表,然后再返回,则可以看到正确的功能区状态。滚动表格视图会再次使其中断。字体颜色始终是正确的。
最佳答案
如果您正在重用单元格,则可能是您正在向该单元格添加多个ribbonView
子视图,因此,即使当前info.visited
的indexPath
是NO
,在该单元格上仍然有另一个RibbonView仍然可以看到。
要做的事情是确保您只有一个ribbonView
子视图,可以通过在配置方法中删除旧的ribbonViews
来实现,也可以通过将UITableViewCell
子类化并向该单元格添加ribbonView
属性来更好地实现,该属性只需设置一次并添加到单元格的视图层次结构一次,然后可以在配置方法中访问并将其设置为hidden
或NO
。
编辑:单元格文本的颜色将始终是正确的,因为您要更改单元格视图层次结构中YES
的一个实例的颜色。如果您的配置方法每次配置时都向该单元格添加一个新的UILabel
子视图,我希望您会看到相同的错误行为。
编辑:尝试的代码
-(void)configureCell:(UITableViewCell *)cell atIndexPath:(NSIndexPath *)indexPath {
static NSInteger ribbonTag = 12345;
StoryInfo *info = [self.fetchedResultsController objectAtIndexPath:indexPath];
// re-use a ribbonView if one's already been added to this cell
UIImageView *ribbonView = [cell.contentView viewWithTag:ribbonTag];
if (!ribbonView){
ribbonView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 15, 15)];
ribbonView.tag = ribbonTag;
UIImage *ribbon = [UIImage imageNamed:@"ribbon.png"];
[ribbonView setImage:ribbon];
// add subviews to contentView
[cell.contentView addSubview:ribbonView];
}
if([[NSNumber numberWithBool:NO] isEqualToNumber:info.visited]) {
cell.textLabel.textColor = [UIColor colorWithRed:53/255.0 green:53/255.0 blue:52/255.0 alpha:1];
ribbonView.hidden = NO;
}
else {
cell.textLabel.textColor = [UIColor colorWithRed:128.0/255.0 green:128.0/255.0 blue:128.0/255.0 alpha:1.0];
ribbonView.hidden = YES;
}
}
关于ios - 有条件地在UITableViewCell中显示图像,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15451469/