swift-Tableview单元格UIButton背景色

时间:2018-06-29 01:08:34

标签: ios swift uibutton tableview

使用具有表视图的应用程序。在每个单元格中都有两个按钮(通过/失败)。如果用户点击“确定”,则通过的背景将变为绿色,而“!”失败,背景变为红色。我遇到的问题是,如果连续点击了一个按钮(假设失败按钮)。滚动淹没到另一行(如向下5行)。失败按钮的背景色也已更改(红色)。

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    var cell: CellTableViewCell! = tableView.dequeueReusableCell(withIdentifier: "cell") as! CellTableViewCell

    if cell == nil
    {
        cell = CellTableViewCell(style: UITableViewCellStyle.default, reuseIdentifier: "cell")
        cell.textLabel?.text = myArray[indexPath.row]
        cell.fail.tag = indexPath.row
        cell.fail.addTarget(self, action: #selector(ViewController.errorBtn(_:)), for: .touchUpInside)
    }
    else
    {
        cell.textLabel?.text = myArray[indexPath.row]
        cell.fail.tag = indexPath.row
        cell.fail.addTarget(self, action: #selector(ViewController.errorBtn(_:)), for: .touchUpInside)
    }

    return cell
}

这是一个快速链接的应用程序的链接,其中代码有问题。 https://github.com/morenoa/iOS3/tree/master/Table%20Cell 任何帮助是极大的赞赏 谢谢。 抱歉,如果重新发布。只是难住了。

3 个答案:

答案 0 :(得分:0)

您的应用似乎无法知道应返回绿色,因为您仅实现了将其更改为警报/红色的功能,但您并未检查其他任何内容,因此当您完成操作后,如果声明,那么所有单元格都会改变,因为它们的知识不同。

我希望这对您有帮助

答案 1 :(得分:0)

您可以通过将数组更改为字典并将值设置为true / false来跟踪按钮状态。

例如var myArray = ["my": false, "hello": false]

然后根据键的值在cellForRowAt cellForRowAt中设置状态,而在func errorBtn(_ sender: UIButton)中只需切换所选按钮的值即可。

答案 2 :(得分:0)

首先,必须保留一个引用,以确保该按钮已被选中。其次,最好在cellForRowAt函数上设置按钮的背景颜色。

可以通过各种方式来保持所选按钮的参考。通常,我使用一个对象数组,该对象在对象上具有bool属性。

在您的情况下,我认为最简单的方法是这样的,因为您已经有一个用于单元格标题的字符串数组。您可以创建布尔数组来保持按钮状态。如:

var myArraySelected:[Bool] = [false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false]

然后在cellForRowAt上放置此代码以设置按钮的背景色

if (myArraySelected[indexPath.row]){ cell.fail.backgroundColor = UIColor.red }else{ cell.fail.backgroundColor = UIColor(red: 214.0/255.0, green: 214.0/255.0, blue: 214.0/255.0, alpha: 1.0) }

最后,将errorBtn操作更改为:

@IBAction func errorBtn(_ sender: UIButton) { myArraySelected[(sender as AnyObject).tag] = true self.tableView.reloadData() }

别忘了为表格视图创建出口。