2012-02-05 46 views
0

問題是這樣的。我有一個PageViewController作爲我的根視圖控制器。使用PageViewController類的ViewDidLoad塊中的SetViewControllers初始化第一個頁面,就像使用頁面的手勢識別器來回翻頁一樣。此根視圖控制器可通過AppDelegate在應用程序範圍內使用。從子視圖控制器訪問PageViewController的方法

我想添加從書中任何位置返回到第一頁的功能,因此在我的PageViewController類中創建了一個公共方法,該方法簡單地稱爲SetViewControllers方法。雖然這似乎工作,我注意到一些怪癖。在後臺循環播放的音樂(再次,在AppDelegate中聲明的AVAudio對象)將重新啓動,並且ViewDidLoad塊不會觸發,直到使用手勢識別器再次打開頁面爲止。

我使用GetNextViewController嘗試了同樣的事情,但它只是爲PageViewController引用引發一個空引用異常。我假設我沒有掌握的控件之間存在某種關係,或許與PageViewController的DataSource有關。我曾嘗試委託給一個覆蓋默認方法的類,以及使用Mono的this.pageViewController.GetNextViewController = delegate(方法簽名)語法無濟於事。

有沒有人有任何見解我的問題是什麼?

編輯:代碼爲AppDelegate.cs可以在這裏查看:https://gist.github.com/1747537和PageViewController.cs在這裏:https://gist.github.com/1747559

+0

我假設你是繼承UIPageViewController,對吧?這個控制器並不是要被分類的,但是一些代碼會有幫助。 – 2012-02-05 18:00:07

回答

0

我可以看到幾個問題,在您的代碼:

  • PageViewController已經在你的應用程序的根控制器,沒有必要調用AddSubview()任何地方。
  • 您從UIViewController inherinting再封裝一個UIPageViewController。你應該無論是從UIPageViewController繼承或者根本沒有繼承(如果爲迪米特里說UIPageViewController並不意味着子類這是真的)。
  • ReturnToFrontPage()可能是您的AppDelegate而不是您的子類UIPageViewController的一種方法。
  • 通過繼承和封裝的組合,您構建了視圖控制器的層次結構。如果沒有正確實施,這會導致事件觸發問題。

總之:不要繼承你的情況。使用一個普通的UIPageViewController,並使你的AppDelegate成爲一種方法,那麼它應該都是在公園散步。

+0

一旦指出它就很明顯。謝謝! – 2012-02-07 21:15:56

+0

我面臨同樣的問題,你可以請發佈它的代碼。從書中的任何地方返回到第一頁。 – 2012-12-24 08:11:32

相關問題