引用同一视图的多个 UITableViewCell 单元格附件视图失败
Posted
技术标签:
【中文标题】引用同一视图的多个 UITableViewCell 单元格附件视图失败【英文标题】:multiple UITableViewCell cells accessoryView referencing same view fails 【发布时间】:2012-06-02 07:18:00 【问题描述】:在 UITableViewController 中,我正在实例化 UITableViewCells,其中一些单元格由附件视图突出显示。对我来说,这是可行的:
// works for me
UIImageView *favoriteImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"icon"]];
[cell setAccessoryView:favoriteImageView];
对我来说,为多个单元重复实例化同一个视图似乎很浪费;但是,当我尝试重新使用与多个单元格的附件视图相同的视图时,我的应用程序以一种悲惨的方式失败(完全黑屏,没有显示视图)我无法调试。我是否在方法中将 favoriteImageView 声明为静态,例如
// doesn't work for me
static UIImageView *favoriteImageView = nil;
if (!favoriteImageView)
favoriteImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"icon"]];
[cell setAccessoryView:favoriteImageView];
或者将它声明为 ivar 并在 init 中定义它,这样我就可以得到:
// doesn't work for me
[cell setAccessoryView:[self favoriteImageView]];
在这两种不工作的情况下,当一个单元格设置了它的附件视图时,它可以正常显示。一旦我标记第二行以便将附件视图设置为引用相同的视图,整个事情就会挂起。
构造一个 UIView 和/或配置一个 UITableViewCell 以使同一个 UIView 可以被多个 UITableViewCells 的附件视图引用的要求是什么?
【问题讨论】:
类似问题:***.com/questions/3190675/… 【参考方案1】:UIImageView 从 UIView 扩展而来。而且一个 UIView 不能同时在两个或多个地方。 因此,如果您尝试同时在两个或多个单元格中显示 UIImageView,它将无法正常工作。屏幕上的每个单元格都需要一个 UIImageView。
我建议为每个单元格创建 UIImageView。 tableviewcells 将与它们的附件视图一起重用,所以我不会太担心性能或内存问题。
【讨论】:
感谢您的回复,这对我来说很有意义。但是,我在 Stack Overflow 上的其他地方看到过相关的代码 sn-ps,这意味着可以将视图重用于附件视图。例如,在这个问题的 #1 答案中,accessoryView 似乎是从 ivar 设置的,甚至还有评论“没有理由每次都创建一个新的,对吧?”这样对吗? ***.com/questions/7390866/… 有趣,虽然我不太确定这是否是有效的代码。我想值得一试。据我所知,您需要为每个单元格创建一个。这仍然不是一个问题,因为最多可能会在实践中制作 7 个。我建议尝试我的答案,我很确定它会起作用。然后如果可能,将其优化为 1 个视图以上是关于引用同一视图的多个 UITableViewCell 单元格附件视图失败的主要内容,如果未能解决你的问题,请参考以下文章
防止更新UITableViewCell的NSManagedObject引用
UIbutton 在自定义 UITableViewCell 中释放
UITableViewCell 原型在同一视图控制器中的两个 UITableView 之间重用
从 UITableViewCell 到 UITableView 到 UINavigationController 的引用