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

Swift技术问题:TableView模态跳转后Protocol Delegate不生效

解决模态视图选中单元格后更新原视图按钮文本的问题

嘿,作为Swift初学者碰到这种委托失效的情况太常见啦,咱先揪出问题根源,再一步步解决~

核心问题:委托对象(delegate)未被正确赋值

你写的委托协议和方法逻辑都是对的,但视图控制器2(DashboardModalViewController)的delegate属性默认是nil,所以当你调用delegate?.didSelectValue(value: rowTitle)时,这个方法根本没被触发(可选链调用在nil时会直接跳过)。

具体解决步骤

1. 在视图控制器1中设置委托对象

因为你是通过Storyboard的模态segue跳转,所以需要在ChartsViewController的prepare(for:sender:)方法里,给即将弹出的DashboardModalViewController实例赋值delegate:

class ChartsViewController: UIViewController { 
    @IBOutlet weak var titleButton: UIButton! 

    // 如果你是通过按钮点击触发segue,记得给按钮关联这个IBAction(直接用Storyboard的segue触发也可以)
    @IBAction func openModalTapped(_ sender: UIButton) {
        performSegue(withIdentifier: "ShowDashboardModal", sender: self)
    }

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        // 先判断segue的目标控制器是不是我们要的模态视图控制器
        guard let modalVC = segue.destination as? DashboardModalViewController else {
            return
        }
        // 关键!把当前视图控制器设为模态视图的委托
        modalVC.delegate = self
    }
} 

extension ChartsViewController: ModalDelegate { 
    func didSelectValue(value: String) { 
        self.titleButton.setTitle(value, for: .normal)
        // 可以加个打印验证方法是否被调用
        print("委托方法触发,按钮文本更新为:\(value)")
    } 
}

2. (可选但推荐)给委托属性加上weak修饰符

为了避免循环引用(模态视图控制器被原视图控制器强引用,原视图又被模态视图的委托强引用),给DashboardModalViewController的delegate属性加上weak关键字(因为你的协议已经标记为class类型,支持弱引用):

protocol ModalDelegate: class { 
    func didSelectValue(value: String) 
} 

class DashboardModalViewController: UIViewController { 
    // 加上weak修饰符
    weak var delegate: ModalDelegate? 
} 

3. 额外检查点

  • 确保Storyboard里的segue是从ChartsViewController的按钮(或者视图控制器本身)连接到DashboardModalViewController的,且如果用了performSegue(withIdentifier:),要给segue设置对应的identifier(比如ShowDashboardModal)。
  • 确认DashboardModalViewController中的rows数组已经正确初始化,rowTitle能拿到有效值(你已经加了print(rowTitle),可以看控制台是否输出正确内容)。

这样修改后,当你选中模态视图的TableView行时,委托方法就会被触发,原视图的按钮文本也就会更新啦~

内容的提问来源于stack exchange,提问作者user3628240

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 06:55:27