UIView内Coordinator模式导航代理失效问题求助
问题根源
你的CustomNavigationBar的delegate属性为nil,导致按钮点击时仅print语句执行,代理导航逻辑无响应。具体原因是:
MainCoordinator给MonitoringViewController设置了delegate = self,但MonitoringViewController并未将该代理传递给内部的CustomNavigationBarCustomNavigationBar的delegate未被赋值,因此delegate?.navigateToXXX()调用无效
修复方案
步骤1:修改MonitoringViewController,传递代理链
更新MonitoringViewController.swift,添加代理属性并将CustomNavigationBar的代理指向自身代理:
import UIKit class MonitoringViewController: UIViewController { @IBOutlet weak var customNavigationBar: CustomNavigationBar! // 添加导航代理属性 weak var delegate: NavigationControllerDelegate? override func viewDidLoad() { super.viewDidLoad() // 将CustomNavigationBar的代理绑定到当前VC的代理(即MainCoordinator) customNavigationBar.delegate = delegate } }
注:将IBOutlet命名改为小驼峰
customNavigationBar,符合Swift命名规范。
步骤2:保持MainCoordinator的原有设置
MainCoordinator.swift中的start()方法已正确设置vc.delegate = self,无需修改:
func start() { let vc: MonitoringViewController = MonitoringViewController() vc.delegate = self self.navigationController.viewControllers = [vc] }
修复后逻辑链路
点击按钮时的调用流程变为:CustomNavigationBar按钮点击 → CustomNavigationBar.delegate(指向MainCoordinator) → MainCoordinator的navigateToXXX方法 → 执行页面导航操作
内容的提问来源于stack exchange,提问作者iosSwift
相关产品推荐
相关产品推荐

