2017-10-20 26 views
0

スワイプアウトメニューを作成するのにSWRevealを使用しています。閲覧前のスウィフトオブザーバ

アプリが読み込まれると、アプリ内の他のページにボタンがあるホームページが表示されます。ボタンが押されると、セグが実行されます。&メニューが更新され、新しく選択されたページがハイライトされ、次回にメニューが引き出され、ユーザーが現在表示しているページを示します。

私は以下のようにメニューを更新するためにオブザーバーを使用しています。スワイプメニューがロードされてからボタンが押されると、コードは正常に機能します。

しかし、スワイプメニューとしてホームページが最初に読み込まれたときには、オブザーバーはまだ作成されていません。

私の質問:ホームページが読み込まれてからオブザーバーが作成されると、スワイプメニューを初期化する方法はありますか?または私が見ていないこれに近づく方法がありますか?

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(ポスト通知):

@IBAction func dailyGiveAway(_ sender: Any) { 

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

} 

答えて

0

ここに最善のアプローチは、おそらく委任を使用することです。

あなたが作成することができます。

あなたのViewControllerで
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 
     } 
} 

、最終的には:

class ViewController: UIViewController, GiveAwayDelegate { 

    func changeGiveaway(notification: Notification){ 

     print("Change giveway was called") 

     ... 

    } 
}