如果在异步调用

时间:2018-03-17 22:17:04

标签: eureka-forms

我正在生成一个带有可重新排序的MultivaluedSection的表单,并在对我的后端API进行异步调用后创建表单。显示表单时,可重新排序的控件不会显示。但是如果我在没有异步调用的情况下制作表单,那么它们就会显示出来。我不确定如何使用异步调用使其全部正常工作。有任何想法吗?下面是说明行为的代码。如果在没有Dispatch延迟的情况下运行test(),那么它将正确呈现。另外,作为一个有趣的复活节彩蛋,如果你在导航控制器中将其显示为除根之外的其他东西并开始拖动以弹回到前一个,但是让它提前走,不要让它弹回到根,那么重新排序控件也会出现。任何想法如何解决这个问题?

import Eureka

class TestFormViewController: FormViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        DispatchQueue.main.asyncAfter(deadline: .now() + 3, execute: {
            self.test()
        })
    }

    func test() {

        self.form +++ MultivaluedSection(multivaluedOptions: [.Reorder],
                                     header: "Section Items") { formSection in

            formSection.tag = "items"

            for i in 0...5 {

                formSection <<< LabelRow() {

                    $0.title = "Row " + String.init(describing: i)
                    $0.value = "Row " + String.init(describing: i)

                    $0.cellSetup({ (cell, row) in
                        cell.detailTextLabel?.isHidden = true
                    })
                }
            }
        }
    }
}

编辑:我已尝试在该部分执行tableView.reloadData()和重新加载,但这些似乎没有做任何有效的工作。

编辑2:我通过在从异步调用获取数据之前在viewDidLoad中构建表单找到了一种解决方法。然后,一旦我有数据将值分配给正确的表单元素并在此时添加可重新排序的行。这似乎可以解决问题。对于常规TextRow或TextArea类型的行,我还需要在设置值后对它们运行updateCell()以使它们显示。

0 个答案:

没有答案