Условно изменить высоту ячеек в UITableView - PullRequest
0 голосов
/ 20 марта 2019

Я создаю форму в виде таблицы.

Допустим, у меня есть 4 разных типа ячеек, каждый из которых представляет собой вопрос с разными типами ответов

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    if sortedFixedContentType.count != 0 {
        let item = sortedFixedContentType[indexPath.row]

        switch item.typeId {
        case "1":
            let cell = tableView.dequeueReusableCell(withIdentifier: "FirstCell", for: indexPath) as! FirstCell
            return cell;

        case "2":
            let cell = tableView.dequeueReusableCell(withIdentifier: "SecondCell", for: indexPath) as! SecondCell
            cell.customDelegate = self
            return cell;
        case "3":
            let cell = tableView.dequeueReusableCell(withIdentifier: "ThirdCell", for: indexPath) as! ThirdCell
            cell.commentsTextView.delegate = self
            return cell;

        case "4":
            let cell = tableView.dequeueReusableCell(withIdentifier: "FourthCell", for: indexPath) as! FourthCell
            return cell;

}

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

Например:

На FirstCell можно ответить A , B или C ,

Если я отвечу, A SecondCell будет отображаться с ответами X и Y .

Если X - это ответы, будет отображаться ThirdCell (у которого нет опций, кроме TextField), а после завершения FourthCell будет отображаться

Но , если в FirstCell ответ будет B или C только FourthCell будет отображаться напрямую.

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

Если я попадаю в textField в ThirdCell, а затем меняю свой первый ответ, SecondCell скрыт, а ThirdCell нет, так как условие быловторой ответ, и он уже сделан, поэтому я подумал о том, чтобы установить высоту каждой строки в качестве условия, но я не знаю, как это сделать.

Итак, у меня есть два основных вопроса:

  • Можно ли получить доступ к heightForRowAt, чтобы установить его как условие?

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

Заранее спасибо!

Ответы [ 2 ]

1 голос
/ 20 марта 2019

Я думаю, что обычный метод состоит в том, чтобы не изменять высоту, а манипулировать источником данных (количеством строк в сечении и т. Д.), Чтобы показать / скрыть соответствующие ячейки.

Вам следует соответствующим образом обновить источник данных после события, а затем сразу после того, как вы можете использовать func insertRows(at indexPaths: [IndexPath], with animation: UITableView.RowAnimation) и tableView.deleteRowsAt(at indexPaths: [IndexPath], with animation: UITableView.RowAnimation) для вставки / удаления ячеек в tableView

Эта документация может помочь: https://developer.apple.com/documentation/uikit/uitableview/1614879-insertrows

0 голосов
/ 20 марта 2019

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

var selectedRow: Int = 999 {
        didSet {
            tableView.beginUpdates()
            tableView.endUpdates()
        }
    }

И затем, как и вы, я влияю на высоту строки внутри функции heightForRow.

    func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
        if indexPath.row == selectedRow {  //assign the selected row when touched
            let thisCell = tableView.cellForRow(at: indexPath)

            if let thisHeight = thisCell?.bounds.height {
                print("Bam we got a HEIGHT!!")
                return thisHeight + 50

            }
        }
    return 60 //return a default value in case the cell height is not available
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...