这是一个与Swift开源项目Eureka相关的问题,我在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
根据下面Kevin的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()
,但没有用。
2条答案
按热度按时间qmelpv7a1#
我找到了!您必须将
.cellUpdate {...}
闭包添加到行中,并在其中为options
属性赋值.就像这样,o8x7eapl2#
在README的底部FAQ部分有一个重新加载的参考
如何使用字典设置表单值
...如果表单已经显示,我们必须通过重新加载表视图
tableView.reloadData()
或对每个可见行调用updateCell()
来重新加载可见行。但是,我甚至认为没有这个必要,只要在更新
self.jobs
之后调用setupForm()
即可。您可以从
FormViewController
源代码中看到,当设置form
时,将重新加载tableview。