我正在构建一个主从应用程序。我有一个章节视图控制器(VC),它是主VC的子级。点击章节VC中的行会弹出不同的详细VC,用户在其中完成所需信息。一旦详细VC中的信息完成,我希望在相关章节VC行中显示一个勾号。FYI,selectedProject是一个核心数据对象。
我在详细VC的viewWillDisappear中调用通知以刷新章节VC。
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath)
let detailCase: String = selectedProject!.section![indexPath.row]
configureCell(cell, withSectionName: detailCase)
print("location complete is \(selectedProject!.completeLocation)")
print("electricity complete is \(selectedProject!.completeElectricity)"
print(cell.textLabel!.text!)
print(cell.accessoryType.rawValue)
return cell
}
func configureCell(_ cell: UITableViewCell, withSectionName sectionName: String) {
switch sectionName {
case "Project Details" :
cell.accessoryType = .checkmark
case "Location" :
if selectedProject?.completeLocation == true {
cell.accessoryType = .checkmark
}
case "Electricity Use" :
if selectedProject?.completeElectricity == true {
cell.accessoryType = .checkmark
}
default :
cell.accessoryType = .none
}
cell.textLabel!.text = sectionName
}
func refreshTable(notification: Notification) -> Void {
print("Notification ran")
self.tableView.reloadData()
}
控制台:
通知已运行
位置完成为真
用电完成为真
项目详细信息
3
位置完成为真
用电完成为真
位置
3
位置完成为真
用电完成为真
用电量
3
The 3's = .checkmark
看起来cellForRowAt非常清楚它应该做什么,但表格没有立即显示复选标记。相反,您必须单击返回到主VC,然后转到分区VC以显示复选标记,或者您必须单击分区VC中的不同行,复选标记将随机显示。
我尝试在dispatchqueue.main.async中调用reloadData,但没有成功。我再次尝试在流程的不同点调用reloadData,但仍然没有成功。我尝试调用tableView.beginUpdates/.endUpdates和reloadSectionData,同样无法使复选标记显示。
如果我以编程方式提示section VC的viewWilDisappear和viewWillAppear,当选择sections VC中的不同行时,复选标记将出现。 “似乎” reloadData()并没有促使tableView完全重新加载。
附:storyboard中的accessory项设置为.none。