2015-08-14 5 views
0

У меня есть viewController, который имеет containerView с pageView. Как только я сползаю представление из pageView, я хочу вызвать функцию в viewController, я попытался с моим кодом ниже, но он вызывает buttonMaskColor, пожалуйста, где моя проблема?Делегация Swift Protocol не работает

class PlaceMenuDetailsViewController: UIViewController, PageViewSliderDelegate { 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     detailsButton.pageDelegation = self 
    } 

    func buttonMaskColor(){ 
     println("delegate work") 
    } 
} 

class DetailPageViewController: UIPageViewController, UIPageViewControllerDelegate, UIPageViewControllerDataSource { 

    weak var pageDelegation:PageViewSliderDelegate? 

func pageViewController(pageViewController: UIPageViewController, viewControllerAfterViewController viewController: UIViewController) -> UIViewController? { 

    pageDelegation?.buttonMaskColor() 

    var page = (viewController as! PageDelegate).pageNumber + 1 
    return viewControllerForPage(page) 
} 
+0

"но он звонит buttonMaskColor" или не звонит? –

+0

Нет, это не называется. @Ramshad –

+0

Я думаю, что делегат просмотра страницы DetailPageViewController равен нулю. Попробуйте добавить делегат = self в viewDidLoad из DetailPageViewController –

ответ

2

Вы должны назначить себя на pageDelegation в функции prepareForSegue в вашем MainView после предоставления и идентификатор для встраивания Segue как это:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 

    if segue.identifier == "embedSegueIdentifier" { 

     let distinationVC = segue.destinationViewController as? DetailPageViewController 

     distinationVC?.pageDelegation = self 

    } 

} 
+0

Это работает, но могу ли я спросить, почему он вызывает функцию func buttonMaskColor()' на первом слайде? –

+0

Это потому, что вы вызываете его в viewControllerAfterViewController, и эта функция выполняется каждый раз, когда состояние контроллера просмотра страницы изменяется, в том числе при первом отображении. не могли бы вы объяснить, что вы хотите в другом вопросе, чтобы я мог вам помочь. upvote и принять пожалуйста, если он сработает. – Firas

+0

Прошу прощения, я не понял viewControllerAfterViewController? –

Смежные вопросы