Can someone explain to me why this simple MVP implementation is not working? The addressDemoViewControllerDidTap method in the AddressDemoPresenter extension is not called. Everything seems ok to me, but I am probably missing something.
final class AddressDemoPresenter {
private weak var addressDemoViewController: AddressDemoViewController?
func makeAddressDemoViewController() -> UINavigationController {
let demoViewController = AddressDemoViewController()
addressDemoViewController = demoViewController
demoViewController.delegate = self
return UINavigationController(rootViewController: demoViewController)
}
}
extension AddressDemoPresenter: AddressDemoViewControllerDelegate {
func addressDemoViewControllerDidTap(_ addressDemoViewController: AddressDemoViewController) {
print("FOO")
}
}
// VIEW CONTROLLER
protocol AddressDemoViewControllerDelegate: AnyObject {
func addressDemoViewControllerDidTap(_ addressDemoViewController: AddressDemoViewController)
}
final class AddressDemoViewController: UIViewController {
weak var delegate: AddressDemoViewControllerDelegate?
override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = .white
let button = UIButton(type: .system)
button.setTitle("Address Form", for: .normal)
button.setTitleColor(.white, for: .normal)
button.backgroundColor = .red
button.layer.cornerRadius = 8.0
button.addTarget(self, action: #selector(buttonTapped), for: .touchUpInside)
view.addSubview(button)
button.translatesAutoresizingMaskIntoConstraints = false
NSLayoutConstraint.activate([
button.centerXAnchor.constraint(equalTo: view.centerXAnchor),
button.centerYAnchor.constraint(equalTo: view.centerYAnchor),
button.widthAnchor.constraint(equalToConstant: 200),
button.heightAnchor.constraint(equalToConstant: 50)
])
}
}
private extension AddressDemoViewController {
@objc func buttonTapped() {
delegate?.addressDemoViewControllerDidTap(self)
}
}