问题描述
您好,当另一个视图控制器中的委托调用一个函数时,我遇到了一些问题。我有两个视图控制器。目标是,当其中一个视图控制器关闭时,它将调用一个函数。
这是第一个视图控制器的代码。调试 consul 中的“A”和“B”打印。
protocol UpdateApproachProtocol {
func addApproachToEntry()
}
class ApproachViewController: UIViewController,UITableViewDelegate,UITableViewDataSource,UITextFieldDelegate {
var delegate: UpdateApproachProtocol?
override func viewDidLoad() {
super.viewDidLoad()
title = "Add an Approach"
tableView.delegate = self
tableView.dataSource = self
safeArea = view.layoutMarginsGuide
setupView()
}
override func viewDiddisappear(_ animated: Bool) {
LoadData.shared.approachArray.append(newApproach)
print("A")
delegate?.addApproachToEntry()
print("B")
}
}
这是另一个视图控制器的代码……“测试”永远不会被打印出来。我错过了什么?
class AddEntryViewController: KeyboardViewController,SendTailToEntryProtocol {
override func viewDidLoad() {
super.viewDidLoad()
let approachVC = ApproachViewController()
approachVC.delegate = self
}
extension AddEntryViewController: UpdateApproachProtocol {
func addApproachToEntry() {
print("test")
}
}
}
func tableView(_ tableView: UITableView,didSelectRowAt indexPath: IndexPath) {
if indexPath.section == 5 && indexPath.row == 0 {
self.navigationController?.showDetailViewController(ApproachViewController(),sender: nil)
}
}
}
解决方法
在您创建 ApproachViewController
的代码中:
let approachVC = ApproachViewController()
approachVC.delegate = self
self.navigationController?.showDetailViewController(approachVC,sender: nil)
然后,从 viewDidLoad
中删除它,因为它只是创建了 ApproachViewController
并且不对其进行任何操作:
let approachVC = ApproachViewController()
approachVC.delegate = self