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

时间:2017-07-29 08:11:57

标签: swift uitableview

背景:在 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!)"
    }
}

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

4 个答案:

答案 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: