2017-10-20 11 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") 

     ... 

    } 
}