Почему TableView подсвечивает две кнопки? - PullRequest
0 голосов
/ 28 января 2019

В моем приложении есть базовый TableView, в котором отображаются некоторые данные из локального файла JSON.TableView имеет более 50 ячеек .Чтобы определить каждую ячейку, я добавил UIButton в ячейку TableView и добавил изображение к кнопке, когда она выделена.После каждого нажатия UIB кнопка будет вызывать

print(sender.tag)

и будет выделена вместе с изображением.Все идет нормально.Все работает.НО я заметил, что, например, когда нажимаете UIB-кнопку с тегом 2, подсвечивается и каждая десятая UIB-кнопка.Это значит: вы нажимаете кнопку с тегом 3, кнопки с тегом 13, 23, 33 ... тоже подсвечиваются.

Я понятия не имею, чтопроблема может быть.Чтобы решить эту проблему, я попытался выделить кнопку значением тега, но это не помогло

let tempButton = viewWithTag(sender.tag) as? UIButton
tempButton?.isSelected = true

Небольшое примечание: каждая десятая UIButton имеет одинаковое значение для UIButton и CALayer.

Screenshot

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let chapter = arrayList[indexPath.row]
    let cell = tableView.dequeueReusableCell(withIdentifier: "DataCell") as! DataCell
    cell.selectionStyle = .none

    return cell
}

@IBAction func markingCheck(_ sender: UIButton) {
    if sender.isSelected {


        sender.isSelected = false
        print(sender.tag)
    } else {

        sender.isSelected = true
        print(sender.tag)
    }
}

1 Ответ

0 голосов
/ 29 января 2019

Это происходит из-за UITableView повторного использования UITableViewCell.поэтому, когда появляются ваши следующие элементы, ваш UITableView использует ячейку с предыдущей конфигурацией.Вы должны сохранить запись выбранной кнопки и сделать ее выбранной и не выбранной по методу cellForRowAt indexpath.если вы хотите выделить только одну ячейку, вы можете использовать переменную для хранения indexPath и в cellForRowAt indexpath установить выбранную кнопку.и если вы хотите выделить более одной кнопки, вы можете использовать MutableArray.

...