调用嵌入式容器VC方法时不调用父VC委托方法



我有一个父 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)
   }
}

父VC

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
    }
}

嵌入到父VC中的容器视图

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
    }
}

delegate属性一次只能保存对一个对象的引用。一旦您的ChildVC将自己设置为代理人,parentVC就不再是代理人。

如果要通知多个对象,可以使用NotificationCenter

为什么需要 Singleton BLEManager?你在哪里称呼postMessage((?如果警报显示在它们自己的视图控制器中,只需通过协议扩展为默认警报消息编写默认实现。然后只需在 VC 中实现自定义消息的方法即可。如果你想要多个委托,你应该试试这个:http://www.gregread.com/2016/02/23/multicast-delegates-in-swift/

最新更新