![](/img/trans.png)
[英]Adding single and double tap gesture on subview of UITableViewCell
[英]adding subview in a single uitableviewcell
我面临将UIImageView添加到单个UITableViewCell的问题。 我将这样的子视图添加到cellForIndexPath委托方法中,如果self.mediaTypeArray在索引:indexPath.row处包含字符串:“ Image”,则仅将其添加到单元格中
let cell = self.timelineTableView.dequeueReusableCellWithIdentifier( NSStringFromClass(ClassicCaseCell), forIndexPath: indexPath) as? ClassicCaseCell
if self.mediaTypeArray[indexPath.row] == "Image" {
let imageView = UIImageView()
imageView.frame.size = (cell?.evidenceView.frame.size)!
imageView.frame.origin = CGPointZero
imageView.image = img
cell?.evidenceView.addSubview(imageView)
}
然而,这很好用,我发现即使self.mediaTypeArray [indexPath.row]不等于“ Image”,其他两个单元格都包含相同的imageView,我也不明白为什么。 我认为这可能与可重用的tableviewcell有关,但我仍然不明白为什么会这样做。 请帮忙!
我感觉这是因为细胞被重复使用。
解决此问题的一种方法是重写ClassicCaseCell
的prepareForReuse
方法,以从其evidenceView
视图中删除任何图像视图。
但是,我建议您不要以这种方式(通过委托的cellForIndexPath
方法)添加图像视图。 相反,您的ClassicCaseCell
应该将图像视图作为实例变量保存,然后可以在cellForIndexPath
进行设置。 这样,最多只有一个。 您还可以确保在prepareForReuse
中将图像视图设置为nil,并确保如果未设置图像视图将不会出现在单元格中。
首先,不要使用其他地方建议的tag
属性。 那是很久以前使用的技术,但是苹果现在不鼓励这样做。 其次,建议您简化生活,不要在cellForRowAtIndexPath
编程方式添加图像视图。 如果以编程方式添加图像视图,则单元重用会引入笨拙的过程来确定(a)是否需要图像视图; (b)是否有现有的影像视图; (c)可能添加/删除图像视图和/或获取对现有视图的引用。
一个非常简单的解决方案是只具有两个单元原型,一个具有图像视图,另一个不具有图像视图。 然后,根据媒体类型,使用适当的情节提要板标识符使单元出队并使用它。
另一种选择是不考虑单元中的图像视图,并适当地隐藏/显示它。 接下来的挑战是如何最好地管理两组约束,一组约束用于图像视图可见时,另一组约束在图像视图不可见时。 您可以通过明智地选择约束优先级,激活/停用cellForRowAtIndexPath
等中的适当约束来执行此操作。可以做到这一点,但这比上述方法麻烦,因为您仅使用两个像元原型。
您只需要添加一次UIImageView,因此,如果再次使用该单元,则它可能已经存在。 您的问题是检测是否已添加它。 这里有一些建议:
1)始终创建它(只是不设置图像或隐藏它)
2)为它分配一个唯一的标签,并在需要设置它时查找该标签...没有标签,然后创建它
覆盖tableview单元中的prepareForReuse委托,并从那里删除imageview
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.