UITableView не проверяет маркировку ячеек (за пределами didSelect и didDeselect) в Swift - PullRequest
0 голосов
/ 22 ноября 2018

У меня есть UITableView, где я разрешаю пользователю выбирать ячейки, и когда они это делают, я устанавливаю cell.accessoryType в .checkmark.Мое приложение настроено таким образом, что пользователь должен перейти к «основному» ViewController, перейти к TableView, выбрать несколько ячеек, а затем повторить этот процесс несколько раз.Моя проблема в том, что я не хочу, чтобы выбранные пользователем параметры tableView исчезали.Я уже попробовал self.clearsSelectionOnViewWillAppear = false, и это не работает.Поэтому я создал массив, который содержит все indexPath для ячеек, выбранных пользователем, поэтому, когда пользователь переходит к «основному» ViewController и возвращается, я хочу, чтобы мое приложение по существу повторно выбрало эти ячейки.

Вот мой код для этого процесса ...

 for row in selectedRows {
   print("Reselecting: \(row)")
   let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: row)
   print(cell)
   cell.accessoryType = .checkmark
    }

Когда я печатаю ячейку, она отображается в журнале, как это <UITableViewCell: 0x7fc2f90f3e00; frame = (0 0; 375 44); text = 'Title'; clipsToBounds = YES; layer = <CALayer: 0x600000aae260>>.Одна вещь, которую я заметил, - это то, что текст в моей ячейке, когда он отображается правильно, не является Заголовком, как предполагает журнал (хотя это текст по умолчанию в моей раскадровке), может ли это быть как-то связано с моей проблемой?Почему ячейки не отмечены галочкой после запуска этого кода?

1 Ответ

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

Я думаю, вы должны использовать tableView(_:cellForItemAt:) из UITableViewDataSource протокола.

func tableView(_ tableView: UITableView, cellForItemAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "<your reusable identifier", for: indexPath) as! YourCellSubclassIfAny
    cell.accessoryType = isIndexPathSelected(indexPath) ? .checkmark : .none
    // do whatever setup you need
    return cell
}

Конечно, вам нужно установить dataSource вашего tableView (если не используется UITableViewController. Обычноон настроен на контроллер представления, который содержит tableView. Вы можете сделать это в раскадровке или в коде.

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