上一个视图控制器与委托关系不采取预期的行动
我有一个待办事项列表,允许用户添加待办事项到一个表视图。在单独的视图控制器(CompletedViewController
)上,用户可以看到先前完成的待办事项。上一个视图控制器与委托关系不采取预期的行动
有一个在该CompletedViewController
应该允许用户清除完成的项目的列表,以及关于所述初始ViewController
清除完成待办事项(completedThings
)的阵列的itemBarButton
。在CompletedViewController.swift
@IBAction func viewCompletedTapped(_ sender: Any) {
if let vc = storyboard?.instantiateViewController(withIdentifier: "Completed") as? CompletedViewController {
vc.completedTodos = completedThings
navigationController?.pushViewController(vc, animated: true)
}
}
的协议::点击 '清除' 时
protocol CompletedCleared {
func didClearCompleted()
}
调用的方法
创建的CompletedViewController
一个实例,并设置completedTodos阵列中ViewController.swift
itemBarButton
in CompletedViewController.swift
@objc func clearCompleted() {
completedTodos = []
tableView.reloadData()
let vc = ViewController()
vc.didClearCompleted()
}
符合协议在ViewController.swift
func didClearCompleted() {
completedThings.removeAll()
}
这不清除以前视图控制器上的列表。我究竟做错了什么?
你忘了设置CompletedViewController
的代表。在viewCompletedTapped
加入这一行实例化视图控制器后:
vc.delegate = self
还要确保您在CompletedViewController
使用此委托方法。 clearCompleted
应该看起来像这样:
@objc func clearCompleted() {
completedTodos = []
tableView.reloadData()
delegate?.didClearCompleted()
}
我已将'vc.delegate = self'添加到'viewCompletedTapped',并且当我调用'didClearCompleted'方法时该阵列仍未清除 –
看起来您可能需要在清除数组后清空表视图。在'completedThings.removeAll()'后面添加'myTable.reloadData()'。 – Slayter
仍然没有运气。我不认为'didClearCompleted'方法实际上是清除传递给vc的数组,我使用'viewCompletedTapped'动作初始化... –
对未来的建议。尝试在你的问题中更简洁一些,并将相关代码复制并粘贴到你的问题中。 – Slayter
感谢您的提醒!未来肯定会做到这一点! –
随意[添加您自己的答案](https://meta.stackexchange.com/questions/298924/etiquette-for-answering-your-own-question-with-an-answer-inspired-by-another-ans/298925#298925),如果您愿意,但请将解决方案材料留在问题主体之外。 –