多个UITableViewCell单元accessoryView引用相同的视图失败

时间:2012-06-02 07:18:01

标签: ios uitableview

在UITableViewController中,我实例化UITableViewCells,其中一些单元格由accessoryView突出显示。对我来说,这有效:

// works for me
UIImageView *favoriteImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"icon"]];
[cell setAccessoryView:favoriteImageView];

对多个单元重复实例化相同的视图对我来说似乎很浪费;然而,当我尝试重新使用与多个单元的accessoryView相同的视图时,我的应用程序以一种悲惨的方式失败(完全黑屏,没有显示视图)我无法调试。我是否将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]];

在这两个不工作的情况下,当一个单元格设置了其附件时,它会正确显示。只要我标记第二行,以便将accessoryView设置为引用相同的视图,整个事情就会挂断。

构建UIView和/或配置UITableViewCell的要求是什么,以便将相同的UIView作为多个UITableViewCells的accessoryView引用?

1 个答案:

答案 0 :(得分:1)

UIImageView从UIView扩展而来。 UIView不能同时在两个或多个地方。 因此,如果您尝试同时在两个或多个单元格中显示UIImageView,它将无法工作。您需要在屏幕上为每个单元格使用UIImageView。

我建议您为每个单元格创建UIImageView。 tableviewcells将与他们的附件视图一起重用,所以我不会过分担心性能或内存问题。