2015-07-10 67 views
2

我在我的tableviewcell中有一个按钮,当某个条件满足时,我想更改按钮图像。我有我的桌面视图无尽的滚动。swift tableviewcell按钮图像问题

例如,我在第一页上有10个单元格。第一个单元格符合标准并且按钮图标更改正确显示。但是当我滚动11.单元格图标也发生了变化,不符合标准。当我向下滚动时,我观察到第21,31 ...细胞图标也发生了变化。

func setupX(){ 

    let authorID = self.yazar?["author_id"].int! 
    let fetchRequest = NSFetchRequest(entityName: "FavAuthors") 
    let sortDescriptor = NSSortDescriptor(key: "authorID", ascending: true) 
    fetchRequest.sortDescriptors = [sortDescriptor] 
    let predicate = NSPredicate(format: "authorID == %ld", authorID!) 
    fetchRequest.predicate = predicate 
    let fetchResults = self.context!.executeFetchRequest(fetchRequest, error: nil) as? [FavAuthors] 
    if fetchResults!.count == 0 { 
    }else{ 
    self.followButton.setImage(UIImage(named: "UnFollow Button.pdf"), forState: UIControlState.Normal) 
    } 
} 
+0

这是因为tableview中重用的小区....你必须对细胞保持按钮状态摆脱这种 –

+0

我没有任何的想法代码与所描述的问题有什么关系,但我仍然可以知道发生了什么问题:tableViewCells被重用,如果一个单元格移出屏幕,另一个移动到屏幕上,则不会创建新单元格,它会重用先前被驳回的一个。如果将图像设置在“cellForRowAtIndexpath”之外的某个位置,那么如果为新的索引路径创建了单元格,则将保留以前设置的内容。 – luk2302

+0

我把它设置在我的自定义tableviewcell –

回答

1

这是因为单元格与旧状态重复使用。如果图片不符合标准,您应该明确地设置图片。

例如,更改:

if fetchResults!.count == 0 { 
    } else { 
    self.followButton.setImage(UIImage(named: "UnFollow Button.pdf"), forState: UIControlState.Normal) 
    } 

要:

if fetchResults!.count == 0 { 
    self.followButton.setImage(UIImage(named: "Follow Button.pdf"), forState: UIControlState.Normal) 
    } else { 
    self.followButton.setImage(UIImage(named: "UnFollow Button.pdf"), forState: UIControlState.Normal) 
    } 
0

您在向下滚动视图时重复使用单元格,因此第一个单元格中设置的图像将被重用。如果您在if语句中将图像设置为nil,它应该在重用时删除该图像。

+0

谢谢,这解决了我的问题... –

+0

简单的经验法则:数据必须在模型..所以也按钮状态shuold在阵列/ dict/coredata/NSUrserdfault。非用户界面。 – ingconti