自定义 UITableViewCell 图像直到滚动才显示
Posted
技术标签:
【中文标题】自定义 UITableViewCell 图像直到滚动才显示【英文标题】:Custom UITableViewCell image not showing until scrolling 【发布时间】:2013-03-05 22:46:26 【问题描述】:我的自定义UITableViewCell
图像出现错误,直到滚动UITableView
才显示。它不会发生在所有单元格上,只有下一个正在打开或最近一个正在关闭(例如,如果您看到底部的一半单元格,您将无法看到图像,直到您将其一直滚动到视图中)
所以我决定也许我需要更好地将我的UIImages
关联到正确的自定义单元格。
我创建了一个名为“firstImageView”的UIImageView
,然后我进入我的界面构建器并将其与正确的UIImageView
相关联。
然后在tableview:cellForRowAtIndexPath:
里面我试着这样设置
myCustomCell.firstImageView.image = [UIImage imageNamed:@"SMILE.png"];
但是我得到了这个错误
在“UITableViewCell *”类型的对象上找不到属性“firstImageView”
任何帮助将不胜感激
【问题讨论】:
【参考方案1】:为了解决您对即将发布的图片的错误,我的回答是:当您像这样获得UITableViewCell
时
MyCustomCell *myCustomCell = [self.tableView dequeueReusableCellWithIdentifier:@"myCustomCellIdentifier"];
您可以实现 -(void)prepareForReuse
覆盖 UITableViewCell
的方法。否则,也可以在您的单元格出列后在您的 -(UITableViewCell *)tableView:cellForRowAtIndexPath:
方法中设置自定义内容。
您可以在此处获取更多信息:
How to use prepareForUse-Method 和 Apple Documentation of UITableViewCell
解决未知类属性的另一个问题:您的myCustomCell
是什么类型?在界面生成器中,您必须分配正确的类型,并且您的 myCustomCell
也必须是正确的类型。
【讨论】:
好的,谢谢.. 将阅读有关 prepareForUse 的更多信息.. 我有几个不同的客户 tableviewcells 是否重要 对于您使用的所有自定义UITableViewCell
类,您必须实现此方法。在调用dequeueReusableCellWithIdentifier:
时调用它。
这不是真的。我用自定义单元做了很多项目,但从未实现过这种方法。他可能没有将单元格的类更改为他的子类,这就是为什么错误是 UITableViewCell 而不是他的类是什么。
该死的我想不通..我很想有人检查我的 tableview:cellForRowAtIndexPath: 方法,但我正在做一个敏感的项目,我不想在网上发布很多细节...
@rdelmar 这取决于您的单元初始化。当您使用[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"someReuseIdentifier"]
或[someTableView dequeueReusableCellWithIdentifier:@"someIdentifier"]
初始化单元格时,情况会有所不同。在第一种情况下,您正在初始化一个新单元,并且不使用重用标识符。在后一种情况下,您将具有给定重用标识符的单元格出列,因此,单元格被重用,您必须设置新的自定义内容,例如自定义图像。【参考方案2】:
这里 122,111 是表格视图单元格中图像视图的框架,将其替换为您的 ``
UIGraphicsBeginImageContextWithOptions(itemSize, NO,UIScreen.mainScreen.scale); ˚˚
CGSize itemSize = CGSizeMake(122,111);
CGRect imageRect = CGRectMake(0.0, 0.0, itemSize.width, itemSize.height);
[imageView.image drawInRect:imageRect];
imageView.image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
【讨论】:
【参考方案3】:在使单元格出列时,您是否将其转换为您的自定义单元格类?
MyCustomCellClass *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
【讨论】:
【参考方案4】:看起来您创建了一个自定义 UITableViewCell
子类,但您没有使用您在 IB 中分配的标识符(“重用标识符”)将其出列..
【讨论】:
以上是关于自定义 UITableViewCell 图像直到滚动才显示的主要内容,如果未能解决你的问题,请参考以下文章
带有 UIImageView 的自定义 UITableViewCell 不显示图像
自定义 UITableViewCell 中的 UIImageView - 始终调整为图像大小