使用具有表视图的应用程序。在每个单元格中都有两个按钮(通过/失败)。如果用户点击“确定”,则通过的背景将变为绿色,而“!”失败,背景变为红色。我遇到的问题是,如果连续点击了一个按钮(假设失败按钮)。滚动淹没到另一行(如向下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 任何帮助是极大的赞赏 谢谢。 抱歉,如果重新发布。只是难住了。
答案 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()
}
别忘了为表格视图创建出口。