动态加载一行的选项

Isu*_*uru 3 ios swift swift2.2 eureka-forms

这是一个与名为Eureka的 Swift 开源项目相关的问题,我在这里发布了这个问题,因为他们在这里监控他们的标签。

好的,所以我在viewDidLoad视图控制器的方法中创建了一个表单。同时,我对 API 进行 http 调用以获取数据(作业)列表。此调用是异步的。我想将这些作业显示为PushRow.

由于此 API 调用是异步的,因此在收到此数据时,表单已设置好。我有一个类级数组设置,用于填充来自 http 调用的作业列表。相同的数组被分配给该行的options属性。当我收到数据时,我将值分配给数组。但是当我去点击 时PushRow,它是空的。

class CreateEventViewController: FormViewController {

    private var jobs = [Job]()

    override func viewDidLoad() {
        super.viewDidLoad()

        setupForm()

        api.getJobs(.LeadCreated) { jobs, error in
            if let error = error {
                print(error.localizedDescription)
                return
            }

            if let jobs = jobs {
                self.jobs = jobs
            }
        }
    }

    private func setupForm() {
        form
            +++ Section()
            <<< PushRow<String>("Jobs") {
                $0.title = "Choose Job"
                $0.options = jobs.map { $0.description }
                $0.selectorTitle = "Choose..."
            }.onPresent { from, to in
                to.navigationItem.rightBarButtonItem = UIBarButtonItem(barButtonSystemItem: .Done, target: from, action: #selector(CreateEventViewController.multipleSelectorDone(_:)))
            }
    }

}
Run Code Online (Sandbox Code Playgroud)

是否有某种方法可以刷新或重新加载特定行或整个表单的数据?


更新 1

根据下面凯文的回答,我修改了我的代码如下。

override func viewDidLoad() {
    super.viewDidLoad()

    api.getJobs(.LeadCreated) { jobs, error in
        if let error = error {
            print(error.localizedDescription)
            return
        }

        if let jobs = jobs {
            self.jobs = jobs

            if let jobsRow = self.form.rowByTag("Jobs") {
                jobsRow.updateCell()
            }
        }
    }

    setupForm()
}
Run Code Online (Sandbox Code Playgroud)

但由于某种原因,它仍然无法正常工作。选项为空。我检查了通过标签正确拾取单元格。无论如何失败了,我也尝试tableView.reloadData()过但无济于事。

Isu*_*uru 5

我找到了!您必须将.cellUpdate {...}闭包添加到行中,并在其中将值分配给options属性。像这样,

<<< PushRow<String>("Jobs") {
    $0.title = "Choose Job"
    $0.options = jobs.map { $0.description }
    $0.selectorTitle = "Choose..."
}
.cellUpdate { cell, row in
    row.options = self.jobs.map { $0.description }
}
Run Code Online (Sandbox Code Playgroud)