gpt4 book ai didi

ios - 具有多个 Controller 的单个委托(delegate)

转载 作者:行者123 更新时间:2023-11-28 09:44:35 24 4
gpt4 key购买 nike

我遇到了一种情况,我想用一个委托(delegate)注册 2 个不同的 UIViewController,因为我的项目一次显示 2 个 UIViewController。当我触发事件时,我希望两个 Controller 都得到通知,但不幸的是只有一个 Controller 可以接收事件,而不是两个。

示例代码如下:

@objc protocol DownloaderDelegate: class {
func complete()
}

class Downloader {
static let sharedInstance = Downloader()
weak var delegate: DownloaderDelegate?

private init() {

}

func downloadFile() {
self.delegate!.complete()
}
}

然后我在两个 UIViewControllers 中像这样使用它:

override viewDidLoad() {
super.viewDidLoad()

Downloader.sharedInstance.delegate = self
}

知道如何让两个 View Controller 都监听来自单个委托(delegate)的事件吗?

最佳答案

事实上,我认为这里最好的解决方案是从委托(delegate)模式转移到通知模式(有关 Apple 文档的更多详细信息:https://developer.apple.com/library/ios/documentation/General/Conceptual/DevPedia-CocoaCore/Notification.html)。

另一种解决方案是用一组 DownloaderDelegate 替换您的委托(delegate)。但我真的认为通知解决方案是最干净、最简单的。

这是一篇关于 Swift 中的 NSNotification 的好文章:https://www.andrewcbancroft.com/2014/10/08/fundamentals-of-nsnotificationcenter-in-swift/

编辑:你应该注意观察者的移除。最简单的方法是在每个监听事件的类中添加:

deinit {
NSNotificationCenter.defaultCenter().removeObserver(self)
}

关于ios - 具有多个 Controller 的单个委托(delegate),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37077931/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com