Расширяемая ячейка не будет расширяться - PullRequest
0 голосов
/ 13 мая 2019

Я создал две расширяемые ячейки, но вторая не расширяется, когда я нажимаю на нее

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

private var dateCellExpanded: Bool = false

    override func viewDidLoad() {
        super.viewDidLoad()
        // For removing the extra empty spaces of TableView below
        self.tableView!.tableFooterView = UIView()
    }

    override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        if indexPath.row == 0 {
            if dateCellExpanded {
                dateCellExpanded = false
            } else {
                dateCellExpanded = true
            }
            tableView.beginUpdates()
            tableView.endUpdates()
        }
    }

    override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
        if indexPath.row == 0 {
            if dateCellExpanded {
                return 250
            } else {
                return 40
            }
        }
        return 40
    }

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

1 Ответ

1 голос
/ 13 мая 2019

Это работает только для первой строки, потому что вы ограничиваете ее первой строкой с помощью if indexPath.row == 0.

. Вам понадобится массив Bool, а не один Bool.необходимо отслеживать состояние всех строк.

Просто инициализируйте массив с массивом значений false с количеством ваших строк.Установите соответственно NUMBER_OF_ROWS ниже.

Затем, при выборе ячейки, вы переворачиваете (или toggle()) логическое значение для этой строки и просите таблицу обновить.

private var isCellExpanded: [Bool] = Array(repeating: false, count: NUMBER_OF_ROWS)

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    isCellExpanded[indexPath.row].toggle()
    tableView.beginUpdates()
    tableView.endUpdates()
}

override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
    if isCellExpanded[indexPath.row] {
        return 250
    } else {
        return 40
    }
}

Примечаниечто это предполагает, что вы используете только один раздел.В противном случае вам придется настроить структуру данных [Bool] на [[Bool]].

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