Ios 在单个uitableviewcell中添加子视图
将UIImageView添加到单个UITableViewCell时,我遇到了一个问题。我在cellForIndexPath委托方法中添加了这样的子视图,只有self.mediaTypeArray在索引:indexPath.row处包含字符串:“Image”时,才会将该子视图添加到单元格中Ios 在单个uitableviewcell中添加子视图,ios,swift,uitableview,Ios,Swift,Uitableview,将UIImageView添加到单个UITableViewCell时,我遇到了一个问题。我在cellForIndexPath委托方法中添加了这样的子视图,只有self.mediaTypeArray在索引:indexPath.row处包含字符串:“Image”时,才会将该子视图添加到单元格中 let cell = self.timelineTableView.dequeueReusableCellWithIdentifier( NSStringFromClass(ClassicCaseCell),
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)
}
但是,我发现每隔两个单元格都包含相同的imageView,即使self.mediaTypeArray[indexPath.row]不等于“Image”,我也不明白为什么。我认为这可能与可重用的tableviewcells有关,但我仍然不明白它为什么会这样做。请帮忙 您只需添加一次UIImageView,因此如果再次使用该单元格,它(可能)已经存在。你的问题是检测你是否已经添加了它。以下是一些建议: 1) 始终创建它(只是不要设置或隐藏图像)
2) 为它指定一个唯一的标记,并在需要设置时查找标记。。。无标记,然后创建它您只需添加UIImageView一次,这样如果单元格再次使用,它(可能)已经存在。你的问题是检测你是否已经添加了它。以下是一些建议: 1) 始终创建它(只是不要设置或隐藏图像)
2) 为它指定一个唯一的标记,并在需要设置时查找标记。。。没有标签,然后创建它我感觉这是因为细胞被重复使用 解决此问题的一种方法是覆盖
ClassicCaseCell
的preparefore
方法,以从其证据视图中删除任何图像视图
但是,我建议您不要以这种方式添加图像视图(通过委托的cellForIndexPath
方法)。相反,您的ClassicCaseCell
应该将图像视图作为一个实例变量保存,然后可以在cellForIndexPath
中进行设置。这样,最多只有一个。您还可以确保在prepareforeuse
中将图像视图设置为nil,确保未设置图像视图时不会显示在单元格中。我感觉这是因为单元格被重复使用
解决此问题的一种方法是覆盖ClassicCaseCell
的preparefore
方法,以从其证据视图中删除任何图像视图
但是,我建议您不要以这种方式添加图像视图(通过委托的cellForIndexPath
方法)。相反,您的ClassicCaseCell
应该将图像视图作为一个实例变量保存,然后可以在cellForIndexPath
中进行设置。这样,最多只有一个。您还可以确保在prepareforeuse
中将图像视图设置为nil,确保未设置图像视图时不会显示在单元格中。首先,不要使用其他地方建议的标记属性。这是一种很早以前就使用的技术,但苹果现在不鼓励这种做法。其次,我建议您简化您的生活,不要在cellforrowatinexpath
中以编程方式添加图像视图。如果以编程方式添加图像视图,单元重用会引入一个笨拙的过程来确定(a)是否需要图像视图;(b) 是否存在现有的图像视图;和(c)可能添加/删除图像视图和/或获取对现有图像视图的引用
一个非常简单的解决方案是只需要两个单元原型,一个有图像视图,另一个没有图像视图。然后,根据媒体类型,使用适当的情节提要标识符将单元格出列并使用它
另一种选择是在单元格中不考虑图像视图,并根据需要隐藏/显示它。接下来的挑战是如何最好地管理两组约束,一组用于图像视图可见时,另一组用于图像视图不可见时。您可以通过明智地选择约束优先级、激活/停用CellForRowatineXpath
中的适当约束等来实现这一点。这是可以做到的,但这比上述方法更麻烦,即您只需使用两个单元格原型。首先,不要像其他地方建议的那样使用标记
属性。这是一种很早以前就使用的技术,但苹果现在不鼓励这种做法。其次,我建议您简化您的生活,不要在cellforrowatinexpath
中以编程方式添加图像视图。如果以编程方式添加图像视图,单元重用会引入一个笨拙的过程来确定(a)是否需要图像视图;(b) 是否存在现有的图像视图;和(c)可能添加/删除图像视图和/或获取对现有图像视图的引用
一个非常简单的解决方案是只需要两个单元原型,一个有图像视图,另一个没有图像视图。然后,根据媒体类型,使用适当的情节提要标识符将单元格出列并使用它
另一种选择是在单元格中不考虑图像视图,并根据需要隐藏/显示它。接下来的挑战是如何最好地管理两组约束,一组用于图像视图可见时,另一组用于图像视图不可见时。您可以通过明智地选择约束优先级、激活/停用CellForRowatineXpath
中的适当约束等来实现这一点。这是可以做到的,但这比上述方法更麻烦,您只需使用两个单元格原型。在tableview单元格中覆盖prepareForReuse委派并从中删除imageview在tableview单元格中覆盖prepareForReuse委派并从中删除imageview谢谢!我想我会选择你的第二个选项,在初始化图像时将其指定为nil谢谢!我想我会选择第二个选项,在初始化时把图像指定为零,但是如果我不知道,我需要多少UIVIEVIEWWS,考虑一个情况,IVIEVIEWS是动态的,取决于数组。