在 cellForRowAtIndexPath 的 UITableViewCell 的子类中显示 UIImageView
Posted
技术标签:
【中文标题】在 cellForRowAtIndexPath 的 UITableViewCell 的子类中显示 UIImageView【英文标题】:Displaying UIImageView in a subclass of UITableViewCell in cellForRowAtIndexPath 【发布时间】:2012-02-02 16:14:50 【问题描述】:我的 UITableViewCell 子类中有一个 DotImageView 属性。
@property (nonatomic, retain) IBOutlet UIImageView *DotImageView;
我尝试在 cellForRowAtIndexPath 方法中这样显示:
static NSString *TargetCellIdentifier = @"TargetDetailTableViewCellIdentifier";
TargetDetailTableViewCell *cell = (TargetDetailTableViewCell *)[tableView dequeueReusableCellWithIdentifier:TargetCellIdentifier];
if (cell == nil)
UINib *nib = [UINib nibWithNibName:@"TargetDetailTableViewCell" bundle:nil];
[nib instantiateWithOwner:self options:nil];
cell = self.TargetCell;
self.TargetCell = nil;
NSUInteger row = [indexPath row];
NSInteger section = [indexPath section];
Target *aTarget = [targetDictionary objectForKey:[NSNumber numberWithInteger:section]];
if (row == 0)
UIImage *dot;
if (aTarget.importance == high)
dot = [UIImage imageNamed:@"dot_red.png"];
else
dot = [UIImage imageNamed:@"dot_gray.png"];
UIImageView *variantImageView = [[UIImageView alloc] initWithImage:dot];
cell.DotImageView = variantImageView;
[variantImageView release];
return cell;
我在我的单元格中看不到任何图像。我的 UITableViewCell 子类的其他标签确实会显示出来。我错过了 UIImageView 的东西吗?我对它不是很熟悉。谢谢。
【问题讨论】:
cell.DotImageView 它的创建?也许你忘了在 xib 中链接它 当你说:“我的 UITableViewSubclass 中有一个 DotImageView 的属性”它是 UITableViewCell 吗?我认为我们需要在 cellForRowAtIndexPath 方法中查看您的 UITableViewCell 声明。 @Ernesto 我检查了笔尖,它看起来已连接 @TheRonin 是的,我的意思是 UITableViewCell 的子类 你在哪里实例化self.TargetCell
??
【参考方案1】:
我可以使用它
[cell.DotImageView setImage:dot];
我不确定为什么它与我最初使用的其他方法相比有效。
【讨论】:
它在原版中不起作用,因为当您替换单元格的 imageView 时,您还需要将新的 imageView 添加为单元格的子视图,否则它只是单元格的一个属性,它是实际上不在视图层次结构中。不过老实说,我会坚持后一种方法 - 容易得多。【参考方案2】:将您的代码更改为
if (row == 0)
UIImage *dot;
if (aTarget.importance == high)
dot = [UIImage imageNamed:@"dot_red.png"];
else
dot = [UIImage imageNamed:@"dot_gray.png"];
cell.DotImageView.image = dot;
return cell;
您正在做的是将新的 UIImageView 对象分配给 cell.DotImageView
现在您的 cell.DotImageView 指向这个本地图像视图对象而不是 xib 上的那个对象
【讨论】:
他将单元绑定到视图控制器上名为 TargetCell 的插座,然后将单元加载到该属性中。这是一种有效的方法,并且比 objectAtIndex 版本更安全(例如,如果单元格不是 nib 中的第一个对象怎么办),但我同意,您的方法代码少得多并且工作得一样好大多数情况下。我不认为这就是他的代码不起作用的原因。【参考方案3】:1 - 基本案例
只需使用标准 UITableViewCell 的 image 属性。它适用于大多数情况。
2 - 您的自定义案例
请注意,您的属性是对您的 imageView 的简单引用。因此更改它的值不会替换子视图树中的初始值。相反,保留你的 imageView 并设置它的 UIImage 属性会更好。
yourImageView.image = aNewImage.
【讨论】:
【参考方案4】:将方法插入到 TargetDetailTableViewCell 类中:
- (void)setDotImage:(UIImage*)dot
[self.DotImageView setImage:dot];
它对我有用。希望对你有帮助!
【讨论】:
以上是关于在 cellForRowAtIndexPath 的 UITableViewCell 的子类中显示 UIImageView的主要内容,如果未能解决你的问题,请参考以下文章
tableView:cellForRowAtIndexPath 的保留计数:
在 cellForRowAtIndexPath 中将 UIButton 视为 UILabel
UIView 在 cellForRowAtIndexPath 中重叠/再次创建
从 cellForRowAtIndexPath 中调用 heightForRowAtIndexPath?