我有一个关于在我的自定义TableViewCells中使用子视图的问题。在某些行,我想一个或多个图像,以及我与编程这样做:带有图像子视图性能的TableView问题
func addImageToCell(image: UIImage, initialYCoordinate: CGFloat, initialHeight: CGFloat, initialXCoordinate: CGFloat,imageUUID: String) {
imageButton = UIButton.buttonWithType(UIButtonType.Custom) as? UIButton
.....
imageButton!.addTarget(formVC, action: "imageButtonPressed:", forControlEvents: .TouchUpInside)
self.contentView.addSubview(imageButton!)
}
这工作正常。但是,当我滚动我的TableView,它涉及到一个图像的行,有一个小的“滞后”。通常情况下它是完全平滑的,但是当他试图加载这个单元格时,软件会有一个(可能是0.1秒)的延迟。
有没有更好的方式来做到这一点编程没有任何滞后?在从CoreData Fetch初始化UITableViewController时,我加载了我的图像。
这是我的cellForRowAtIndexPath
if(cellObject.hasImages == true) {
cell.qIndex = indexPath.row
var initialXCoordinate:CGFloat = 344.0
let questionImages = formImages[cellObject.qIndex] as [String: Images]!
for (key,image) in questionImages {
let thumbnailImage = UIImage(data: image.image)
cell.addImageToCell(thumbnailImage, initialYCoordinate: 44.00 ,initialHeight: cellObject.rowheight + cellObject.noticeHeight!, initialXCoordinate: initialXCoordinate, imageUUID: image.imageUUID)
initialXCoordinate += 130
}
}
什么想法?在此先感谢
编辑:受虐使用该功能防止按键得到重用:
override func prepareForReuse() {
super.prepareForReuse()
if(self.reuseIdentifier != "CraftInit") {
for item in self.contentView.subviews {
if(item.isKindOfClass(UIButton)) {
item.removeFromSuperview()
}
}
}
谢谢。这是我很久以前的一种方式。但是:我有大约7种不同的Layouts for Cells(这是一个包含大约100个问题的复杂表单) - 我可以动态地为每个单元添加通告和图像。如果我为例子创建通知(这也是一个带文本的UIButton),那么就没有滞后。仅限图像。但如果这是解决这个问题的唯一方法,而不会失去表现,我会这样做。 – derdida 2014-10-01 12:02:14
所以你的意思是我应该在“prepareForReuse”中只隐藏和显示按钮,而不是从我的Cell子视图中删除它? – derdida 2014-10-01 12:04:11
重复使用tableview单元格时添加或删除子视图会导致性能大幅下降。它可能在iPhone模拟器或最新的iPhone 6 Plus手持设备上运行速度很快,但在较旧的设备上运行速度会较慢。我并不完全了解你的单元格的布局和垂直约束,所以很难说你应该如何构建它们。为每个单元布局创建xib +不同的重用标识符(即使您有8个)将是一个好的第一步,至少看看隐藏/显示子视图而不是添加/删除子视图对您的性能有任何积极影响。 – Eugene 2014-10-01 12:20:48