Аксессуары Tableview не загружаются правильно - PullRequest
0 голосов
/ 12 ноября 2018

Я пытаюсь отобразить галочку рядом с избранными отчетами в моем проекте. Я успешно сохраняю заголовок в Core Data и извлекаю их. Я загружаю их в массив с именем favourite. Затем я сравниваю с названием, загруженным в ячейку.

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
{
    guard let cell = tableView.dequeueReusableCell(withIdentifier: "CellClass") as? CellClass else { return UITableViewCell()}

    cell.titleLbl.text = objArray[indexPath.section].sectionObj?[indexPath.row].title ?? "no title"
    cell.descLbl.text = objArray[indexPath.section].sectionObj?[indexPath.row].authors ?? "no authors"

    if (self.favourite.count > 0)
    {
        for i in 0...self.favourite.count - 1
        {
            if (objArray[indexPath.section].sectionObj?[indexPath.row].title == favourite[i].title!)
            {
                cell.accessoryType = .checkmark
            }
        }
    }
    return cell
}

В настоящее время у меня есть только один фрагмент данных в Базовых данных, поэтому должна отображаться одна галочка, но кажется, что в моем табличном представлении есть рекурсивный шаблон из каждых 10 ячеек.

1 Ответ

0 голосов
/ 12 ноября 2018

Клетки используются повторно. Всякий раз, когда вы условно устанавливаете свойство ячейки, вам необходимо сбросить это свойство в других случаях.

Самое простое решение - установить accessoryType на .none перед циклом (и перед if).

Я также предлагаю немного оптимизировать заголовок. Вы звоните objArray[indexPath.section].sectionObj?[indexPath.row].title много раз в этом коде. Сделай это один раз.

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "CellClass") as! CellClass

    let title = objArray[indexPath.section].sectionObj?[indexPath.row].title ?? "no title"
    cell.titleLbl.text = title
    cell.descLbl.text = objArray[indexPath.section].sectionObj?[indexPath.row].authors ?? "no authors"

    cell.accessoryType = .none

    for favorite in self.favourite {
        if title == favourite.title {
            cell.accessoryType = .checkmark
            break // no need to keep looking
        }
    }

    return cell
}

Я также показал много другой очистки кода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...