You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

UIView内Coordinator模式导航代理失效问题求助

问题根源

你的CustomNavigationBar的delegate属性为nil,导致按钮点击时仅print语句执行,代理导航逻辑无响应。具体原因是:

  • MainCoordinator给MonitoringViewController设置了delegate = self,但MonitoringViewController并未将该代理传递给内部的CustomNavigationBar
  • CustomNavigationBar的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 16:30:58