【发布时间】:2016-04-04 20:07:23
【问题描述】:
这是一个与名为 Eureka 的 Swift 开源项目相关的问题,我在 SO 上发布了这个问题,因为他们在这里监控他们的标签。
好的,所以我在视图控制器的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(_:)))
}
}
}
是否有某种方法可以刷新或重新加载特定行或整个表单的数据?
更新 1
根据下面凯文的answer,我修改了我的代码如下。
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()
}
但由于某种原因,它仍然无法正常工作。选项为空。我检查了通过标签正确拾取单元格。无论如何都失败了,我也尝试了tableView.reloadData(),但无济于事。
【问题讨论】:
标签: ios swift swift2.2 eureka-forms