UITableView didSelectRowAt не может получить мою ячейку - PullRequest
0 голосов
/ 28 декабря 2018

У меня есть вопрос.У меня есть UITableView и четыре пользовательских UITableViewCells.
Когда я прокручиваю вниз, я также не могу получить свой пользовательский UITableViewCell в функции didSelectRowAt.
Пожалуйста, дайте мне несколько советов.
Спасибо.

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

    if let cell: ChartTableViewCell = customTableview.cellForRow(at: IndexPath(row: 0, section: 0)) as? ChartTableViewCell {
        printBBLog("here.") //just When I scrolled to bottom, this don't print.
        let colors = AssetViewController.Color.getAllColors()
        cell.barChartView?.tapIndexWithColor(index: indexPath.row-2, color: colors[indexPath.row-2])
    }

}

Ответы [ 3 ]

0 голосов
/ 28 декабря 2018

cellForRow(at:) вернет nil, когда запрошенная ячейка в данный момент не видна на экране.Когда ваше табличное представление прокручивается вниз, строка 0, скорее всего, не видна.

Однако ваш оператор if выполняет свою работу;если cellForRow(at:) возвращает nil, у вас нет ячейки для обновления, поэтому вам не нужно ничего делать в этой функции.

Вы должны установить внешний вид ячейки строки 0 в следующий раз, когда она будет отключена в вашем cellForRow(at:) методе источника данных.

И, как указывало @Bappaditya, у вас есть потенциальные границынарушение нарушения при indexPath.row-2

0 голосов
/ 28 декабря 2018

enter image description here

В UITableView dequeueReusableCell - каждый UITableViewCell будет многократно использоваться с различными данными (изображением).
В вашем случае, когда вы прокрутите вниз, ячейкав IndexPath(row: 0, section: 0) была повторно использована другой ячейкой, которая отображается снизу, поэтому вы не можете настроить эту ячейку.Попробуйте контроль с данными в cellForRowAtIndexpath

0 голосов
/ 28 декабря 2018

Чтобы получить ячейку в вашем didSelectRowAt методе делегата, он должен выглядеть следующим образом:

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    let indexPath = tableView.indexPathForSelectedRow()
    let cell = tableView.cellForRow(at: indexPath) as! ChartTableViewCell
    let colors = AssetViewController.Color.getAllColors()
    cell.barChartView?.tapIndexWithColor(index: indexPath.row-2, color: colors[indexPath.row-2])
}

. Чтобы сохранить табличное представление сверху, вы можете использовать

scrollToRow(at: IndexPath(row: 0, section: 0), at: .top, animated: true)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...