首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

当一个ViewControllers打开时,如何在两个same中收到相同的回调?

在iOS开发中,可以通过代理模式或者通知中心来实现在两个相同的ViewControllers中收到相同的回调。

  1. 代理模式: 代理模式是一种常用的设计模式,可以用于实现对象之间的通信。在这种情况下,可以定义一个协议(protocol),并在两个ViewControllers中实现该协议。其中一个ViewController作为另一个ViewController的代理,当第一个ViewController需要发送回调时,通过代理方法将回调传递给第二个ViewController。

示例代码如下:

代码语言:txt
复制
// 定义协议
protocol CallbackDelegate: AnyObject {
    func didReceiveCallback()
}

// 第一个ViewController
class FirstViewController: UIViewController {
    weak var delegate: CallbackDelegate?

    func openSecondViewController() {
        let secondViewController = SecondViewController()
        secondViewController.delegate = self
        // 打开第二个ViewController
    }
    
    // 实现代理方法
    func didReceiveCallback() {
        // 处理回调
    }
}

// 第二个ViewController
class SecondViewController: UIViewController {
    weak var delegate: CallbackDelegate?

    func someAction() {
        // 触发回调
        delegate?.didReceiveCallback()
    }
}
  1. 通知中心: 通知中心是iOS提供的一种发布-订阅模式的机制,可以用于在不同对象之间进行通信。在这种情况下,可以在第一个ViewController中发送一个通知,而第二个ViewController监听该通知,并在接收到通知时执行相应的回调方法。

示例代码如下:

代码语言:txt
复制
// 第一个ViewController
class FirstViewController: UIViewController {
    func openSecondViewController() {
        let secondViewController = SecondViewController()
        // 注册通知
        NotificationCenter.default.addObserver(self, selector: #selector(didReceiveCallback), name: NSNotification.Name("CallbackNotification"), object: nil)
        // 打开第二个ViewController
    }
    
    // 发送通知
    @objc func didReceiveCallback() {
        NotificationCenter.default.post(name: NSNotification.Name("CallbackNotification"), object: nil)
    }
}

// 第二个ViewController
class SecondViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        // 监听通知
        NotificationCenter.default.addObserver(self, selector: #selector(handleCallback), name: NSNotification.Name("CallbackNotification"), object: nil)
    }
    
    // 处理回调
    @objc func handleCallback() {
        // 处理回调
    }
}

以上是两种常用的方法来实现在两个相同的ViewControllers中收到相同的回调。根据具体的需求和场景,选择适合的方法来实现回调功能。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

没有搜到相关的视频

领券