背景:在 UITableViewCell 中,我有一个按钮。此按钮存储表格视图单元格的状态。如果单击该按钮,则会变为红色。如果再次单击它会变为灰色。
问题:我点击按钮,它变成红色。当我向下滚动并向上滚动时,它将返回默认状态(灰色)。
代码示例(这是在我的自定义表格视图单元格中 - 单击favoriteButton时调用它):
func likeThisPost() {
print("like this post")
let networking = Networking()
if (favoriteButton.tintColor == Color.red)
{
print("unlike this post")
favoriteButton.tintColor = Color.lightGray
numLikes = numLikes! - 1
likesLabel.text = "\(numLikes!)"
}
else {
print("like this post")
favoriteButton.tintColor = Color.red
numLikes = numLikes! + 1
likesLabel.text = "\(numLikes!)"
}
}
如果不在表格视图单元格中,我应该在哪里更改按钮颜色并存储状态?
答案 0 :(得分:1)
我们都知道问题是当您向上或向下滚动时,您的UITableViewCell将被重新加载并设置您默认的状态。
解决方案
状态的最佳位置是tableview数据源
的数组在isStatusLiked:Bool中添加内部数组的键,并根据uitableViewCell类方法中的条件更改按钮颜色
喜欢
var isstatusLiked: Bool = false{
didSet{
likeButton.tintColor = .darkGray
if(isLiked)
{
likeButton.tintColor = .red
}
}
}
答案 1 :(得分:0)
UITableView
重复使用UITableViewCell
个对象。当您从屏幕滚动一个单元格时,UITableView
可能正在重新使用该单元格对象。
将灰色/红色状态存储在单元格之外(可能在ViewController中或其他地方),并恢复tableView:cellForRowAtIndexPath:
内的状态。
答案 2 :(得分:0)
问题是当您向上或向下滚动时,您的UITableViewCell将被重新加载并设置您给出的状态。
解决方案:您可以保留监视器阵列,并根据您的手机状态更改值。在CellForRow中,您需要根据数组状态设置特定单元格的状态。
答案 3 :(得分:0)
当您向下滚动并再次向上时,将调用UITabelViewDataSource方法tableView:cellForRowAtIndexPath :.然后,您的单元格采用该方法中指定的默认状态。因此,您应该在主视图控制器中维护一个布尔值,比如statusLiked,并在此基础上分配tableView中的颜色:cellForRowAtIndexPath: