Я создал кнопку на 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
Третий случай:
Если я нажму 3-ю ячейку, 13, 23, ... цвет тоже изменится.
Думаю, что реализовал без проблем, но выдает ошибку ... Помогите, пожалуйста
@jpulikkottil Спасибо !! Мне удалось создать переменную массива и управлять ею, и это удалось.





Во-первых, обратите внимание, что 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()
У вас нет массива источников данных? как struct CellModel {var bgColor: UIColor}; пусть arrayOfData: [CellModel]; Вы должны это иметь.