Цвет фона ячейки swift-Tableview UIButton - PullRequest
0 голосов
/ 29 июня 2018

Работа над приложением, у которого есть табличное представление. В каждой ячейке есть две кнопки (Pass / fail). Если пользователь нажимает «ОК» для прохода, фон меняется на зеленый и на «!» не удается, фон меняется на красный. Проблема, с которой я сталкиваюсь, заключается в том, что если кнопка нажата подряд (скажем, кнопка сбоя). Прокрутка тонет к другому ряду (как 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 голосов
/ 29 июня 2018

Вы можете отслеживать состояние кнопки, изменив массив на словарь и установив значение true / false.

Для E.g var myArray = ["my": false, "hello": false]

затем установите состояние в cellForRowAt cellForRowAt в соответствии со значением клавиши, а в func errorBtn(_ sender: UIButton) просто переключите значение выбранной кнопки.

0 голосов
/ 29 июня 2018

Во-первых, вы должны сохранить ссылку, если кнопка уже выбрана. Во-вторых, лучше установить цвет фона кнопки для функции cellForRowAt.

Для сохранения ссылки на выбранную кнопку можно добиться различными способами. Обычно я использовал массив объекта, который на объекте получил атрибут bool.

В вашем случае, я думаю, что самый простой способ такой: у вас уже есть массив строк, который используется для заголовка ячейки. Вы можете создать массив 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() }

Не забудьте создать розетку для представления таблицы.

0 голосов
/ 29 июня 2018

Похоже, что ваше приложение не может знать, что должно вернуться к зеленому, поскольку вы только что реализовали функцию, чтобы изменить его на предупреждение / красный, но вы больше ничего не проверяете, поэтому, когда вы завершаете действие в своем Если заявление, то все ячейки изменятся, поскольку они не знают по-разному.

Надеюсь, это поможет

...