从表视图单元格内部修改表视图单元格数据



背景:在我的UITableViewCell中,我有一个按钮。此按钮存储表视图单元格的状态。如果单击该按钮,它将变为红色。如果再次单击它,它将变为灰色。

问题:我点击按钮,它变成红色。当我向下滚动并向上滚动时,它返回到其默认状态(灰色(。

代码示例(这在我的自定义表视图单元格中 - 单击收藏夹按钮时调用(:

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!)"
}
}

如果不在表格视图单元格本身中,我应该在哪里更改按钮颜色并存储状态?

众所周知,当您向上或向下滚动时,您的UITableViewCell将被重新加载,并设置您默认的状态。

溶液

放置状态的最佳位置是表视图数据源的数组

在数组中添加键,例如isStatusLiked:Bool,并基于该条件在uitableViewCell类方法中更改按钮颜色

喜欢

var isstatusLiked: Bool = false{
didSet{
likeButton.tintColor = .darkGray
if(isLiked)
{
likeButton.tintColor = .red
}
}
}

UITableView重用UITableViewCell对象。当您将单元格滚动到屏幕之外时,UITableView可能会重复使用该单元格对象。

将您的灰色/红色状态存储在单元格之外(可能在视图控制器中,也可能在其他地方(,并在tableView:cellForRowAtIndexPath:内恢复状态。

问题是当您向上或向下滚动时,您的UITableViewCell将被重新加载,并设置您给出的状态。

解决方案:您可以保留监视器阵列,并需要根据单元格的状态更改值。在 CellForRow 中,您需要根据数组状态设置特定单元格的状态。

当您向下滚动并再次向上备份时,将调用 UITabelViewDataSource 方法表视图:cellForRowAtIndexPath:。然后,您的单元格采用该方法中指定的默认状态。因此,您应该在主视图控制器中维护一个布尔值,例如 statusLiked,并在此基础上分配 tableView:cellForRowAtIndexPath 中的颜色:

最新更新