我有一个父VC,其中嵌入了容器中的子VC。两个VC都符合委托,但只调用子委托方法。如何让两个VC的委托方法响应?我是否遗漏了容器视图的委托模式?提前感谢您的帮助。
中央课程:
public protocol BLEManagerDelegate: class {
func bLEManagerShowAlert(message: String)
}
public class BLEManager: NSObject {
static let sharedInstance = BLEManager()
weak var delegate: BLEManagerDelegate?
public func postMessage() {
delegate?.bLEManagerShowAlert(message: message)
}
}
ParentVC
class HomeVC: ContentViewController, BLEManagerDelegate {
var bLEManager = BLEManager.sharedInstance
override func viewWillAppear(_ animated: Bool) {
bLEManager.delegate = self
}
// delegate methods
func bLEManagerShowAlert(message: String) {
// THIS METHOD IS NOT GETTING CALLED
}
}
嵌入ParentVC的容器视图
class ChildVC: UITableViewController, BLEManagerDelegate {
var bLEManager = BLEManager.sharedInstance
override func viewWillAppear(_ animated: Bool) {
bLEManager.delegate = self
// delegate methods
func bLEManagerShowAlert(message: String) {
// This method IS getting called
}
}
答案 0 :(得分:2)
您的delegate
属性一次只能保存对一个对象的引用。只要您的ChildVC
将自己设置为代理人,parentVC
就不再是代理人。
如果您想通知多个对象,可以使用NotificationCenter
答案 1 :(得分:0)
为什么需要Singleton BLEManager?你在哪里调用postMessage()?如果警报显示在他们自己的视图控制器中,则只需通过协议扩展名为默认警报消息编写默认实现。然后只需在VC中实现自定义消息的方法。如果您想要多个代表,请尝试:http://www.gregread.com/2016/02/23/multicast-delegates-in-swift/