Swift Eureka: невозможно динамически скрыть / показать ButtonRow внутри cellUpdate

Это мой код для отображения и скрытия строки. Я в основном установил скрытый атрибут, как упомянуто в Eureka FAQ. Пожалуйста, дайте мне знать, если это правильный способ установить скрытый атрибут, чтобы показать / скрыть строку.

    form
    +++ Section("main")
    <<< ButtonRow () { (row: ButtonRow) -> Void in
        row.tag = "sampleRow"
        if self.shouldHide {
            print("hide exampleRow")
            row.hidden = true
        } else {
            print("show exampleRow")
            row.hidden = false
        }
    }
    .cellSetup ({ [unowned self] (cell, row) in
        row.title = "Title Example"
        row.cell.tintColor = .red
    })
    .cellUpdate({ [unowned self] (cell, row) in
        if self.shouldHide {
            print("cellUpdate: hide exampleRow \(self.shouldHide)")
            row.hidden = true
        } else {
            print("cellUpdate: show exampleRow \(self.shouldHide)")
            row.hidden = false
        }
    })
    .onCellSelection({ (cell, row) in
        print("It's Me!")
    })

Позже в коде я обновляю переменную shouldHide в true или false и вызовите tableView.reloadData(), который вызывает блок cellUpdate, но ничего не происходит. Может ли кто-нибудь помочь, пожалуйста? Вот мой проект, который вы можете клонировать и воспроизвести эту проблему. https://github.com/cuongta/testEurekaHideShow

Еще раз спасибо!

1 ответ

Решение

Правильный способ скрыть строку или даже раздел в EurekaForm модифицирует .hidden собственность и вызов .evaluateHidden() После этого, чтобы заставить ваш код работать, вам нужно сделать эту модификацию, ваш shouldHide var не требуется для этой задачи

заменить .onCellSelection метод обратного вызова этим

.onCellSelection({ (cell, row) in
                    print("It's Me!")
                    row.hidden = true
                    row.evaluateHidden()
                })

Полный код

    form +++ Section("main")
        <<< ButtonRow () { (row: ButtonRow) -> Void in
            row.tag = "sampleRow"
            }
            .cellSetup ({ (cell, row) in
                row.title = "Title Example"
                row.cell.tintColor = .red
            })
            .onCellSelection({ (cell, row) in
                print("It's Me!")
                row.hidden = true
                row.evaluateHidden()
            })

обновленный

Если вы хотите скрыть ячейку из любого другого контекста, вам нужно получить эту ячейку по тегу и после этого вы можете изменить .hidden и звонит .evaluateHidden() метод будет сделан

@IBAction func btnAction(_ sender: Any) {
    if let buttonRow = self.form.rowBy(tag: "sampleRow") as? ButtonRow
    {
        buttonRow.hidden = true
        buttonRow.evaluateHidden()
    }
}
Другие вопросы по тегам