我在TableViewCell
上创建了一个按钮。
按下按钮时,颜色会连续变为白色和蓝色。
ViewController
上有一个按钮可以更改所有cells
的颜色。
在ViewController
中:
btnAllCheckBox.onTap
{ (tap) in
let sections = self.tableView.numberOfSections
var rows = 0
for i in 0..<sections {
rows += self.tableView.numberOfRows(inSection: i)
}
if self.btnAllCheckBox.backgroundColor == UIColor(hex: "#FFFFFF") {
for i in 0..<rows {
let cell = self.tableView.cellForRow(at: IndexPath(row: i, section: 0)) as? CustListTableViewCell
cell?.btnCheck.backgroundColor = UIColor(hex: "#58E5E4")
}
self.btnAllCheckBox.backgroundColor = UIColor(hex: "#58E5E4")
}
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
{
let cell = tableView.dequeueReusableCell(withIdentifier: "CustListTableViewCell", for: indexPath) as! CustListTableViewCell
cell.btnCheck.backgroundColor = UIColor(hex: "#FFFFFF")
return cell
}
在TableViewCell
中:
btnCheck.onTap
{ (tap) in
if self.btnCheck.backgroundColor == UIColor(hex: "#FFFFFF")
{
self.btnCheck.backgroundColor = UIColor(hex: "#58E5E4")
}
else
{
if let myViewController = self.parentViewController as? CustViewController {
myViewController.btnAllCheckBox.backgroundColor = UIColor(hex: "#FFFFFF")
}
self.btnCheck.backgroundColor = UIColor(hex: "#FFFFFF")
}
}
错误列表:
这是第一种情况。 ({Cell
个计数= 1000)
当我按下“全选”按钮时,单元格不会改变颜色。
我尝试使用print
打印日志,但是没有问题。
第二种情况。 ({Cell
个计数= 1000)
如果我单击第二个cell
按钮并拖动屏幕,则所选位置将改变! (所有Cells
的共同对象)
ex) row 2 btnCheck.backgroundColor = #58E5E4
-> Drag Screen
-> row 2 btnCheck.backgroundColor = #FFFFFF
-> row 3,4 ... btnCheck.backgroundColor = #58E5E4
第三种情况:
如果我单击第三个单元格,则13、23,...颜色也会更改。
我认为我实施起来没有问题,但出现错误...请帮助我
答案 0 :(得分:1)
首先,请注意,UITableViewCell
是通过dequeueReusableCell
方法创建的,这意味着单元格将为每行保持相同的UITableViewCell
重用。
因此,为了进行UITableViewCell的更改,是将更改后的值保留在viewController中的变量或对象中。然后在您的cellForRowAt
方法中将遵循该值。
下面是一个示例(并非完全可以解决,但可以帮助您解决问题)。
在您的viewController中,添加一个变量以更改颜色。
var dynamicColor: UIColor = .red
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
{
let cell = tableView.dequeueReusableCell(withIdentifier: "CustListTableViewCell", for: indexPath) as! CustListTableViewCell
cell.btnCheck.backgroundColor = dynamicColor
return cell
}
在触发方法中,您可以更改该dynamicColor
变量。
btnCheck.onTap
{ (tap) in
if self.btnCheck.backgroundColor == .red
{
self.btnCheck.backgroundColor = .blue
dynamicColor = .blue
}
else if self.btnCheck.backgroundColor == .blue
{
self.btnCheck.backgroundColor = .red
dynamicColor = .red
}
tableView.reloadData()
}
并且不要忘记在每次更改以反映行之后重新加载tableView
tableView.reloadData()