Swift 视图加载前的观察者

Swift observer before view loaded

我正在使用 SWReveal 创建滑动菜单。

当应用程序加载时,它会显示一个主页,其中包含指向应用程序中其他页面的按钮。按下按钮后,将执行 segue 并更新菜单,突出显示新选择的页面,以便下次拉出菜单时,它指示用户当前所在的页面。

我正在使用观察者来更新菜单,如下所示。加载滑动菜单后,代码可以正常工作,然后按下按钮。

但是,由于尚未创建滑动菜单观察器,首次加载主页时它无法正常工作。

我的问题:是否有一种方法可以在主页加载后初始化滑动菜单,以便创建观察者?还是有一种我没有看到的方法来解决这个问题?

swipeMenu.swift(接收通知):

override func viewDidLoad(){

    NotificationCenter.default.addObserver(self, selector: #selector(self.changeGiveaway(notification:)), name: Notification.Name("changeGiveaway"), object: nil)

}

func changeGiveaway(notification: Notification){

     print("Change giveway was called")

    homeShadow.isHidden = true
    yanaLiveVideoShadow.isHidden = true
    yanaChatShadow.isHidden = true
    yanaShopShadow.isHidden = true
    yanaProfileShadow.isHidden = true
    horoscopesShadow.isHidden = true
    fortuneTellerShadow.isHidden = true
    dailyGiveAwayShadow.isHidden = false



}

home.swift(Post通知):

@IBAction func dailyGiveAway(_ sender: Any) {

    NotificationCenter.default.post(name: Notification.Name("changeGiveaway"), object: nil)
    performSegue(withIdentifier: "giveAway", sender: self)

}

这里最好的方法可能是使用委托。

您可以创建:

protocol GiveAwayDelegate: class {
     func changeGiveAway()
}

var delegate: GiveAwayDelegate?

@IBAction func dailyGiveAway(_ sender: Any) {
    self.delegate?.changeGiveAway()
}

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if let destination = segue.destination as? DestinationViewController {
            destination.delegate = self
        }
}

最后在你的 ViewController:

class ViewController: UIViewController, GiveAwayDelegate {

    func changeGiveaway(notification: Notification){

         print("Change giveway was called")

         ...

     }
}