2012-02-22 47 views
0

我有加載一個「第一頁」視圖 - 控制主視圖 - 控制一個應用程序。一旦用戶點擊幾個按鈕,我換了「第一頁:視圖控制器第二是這樣的:如何循環IOS iphone應用程序的多個視圖控制器?

 [UIView transitionFromView:self.view toView:self.secondPageVC.view duration:1.0 options:UIViewAnimationOptionTransitionFlipFromRight completion:^(BOOL done) { 
      [self.view removeFromSuperview]; 
     }]; 

爲了做到這一點,我包括的頭文件‘下一頁’這是怎麼回事在當前視圖控制器的類中加載並創建下一頁的實例

所有這些工作都很好,直到我到達最後一頁,其中一個按鈕組合將用戶發送回第一頁。然而,當我試圖將第一頁的頭文件的最後一頁,我得到的錯誤。我認爲正在發生的是,每個視圖控制器類都有其定義中的下一個頁面的一個實例,當我們獲得了最後頁面,添加一個instanc第一頁的e會導致編譯器不喜歡的循環。有人可以向我解釋我做錯了什麼嗎?如果我不應該使用這樣的視圖控制器,我應該如何設置一個有10頁的遊戲可以循環回到第一頁?

回答

2
  1. 在您的m,而不是在你的.h包括將解決您的問題
  2. 看的UINavigationController
+1

我會補充說,如果你需要引用頭文件中的第一個vc,你可以在你的頭文件中使用一個前向類聲明... @ class FirstViewController。 – diatrevolo 2012-02-22 23:13:59

+0

謝謝。我不知道「遠期階級宣言」。我讀了它,並能解決這個問題。 – Beleg 2012-02-23 19:46:31

0

我認爲正在發生的是,每個視圖控制器類有一個 實例它的定義,當我們到了 最後一頁中的下一個頁面,加入第一頁的實例會導致一個循環的 編譯器不喜歡。

我不認爲這是它。在Objective-C,對象不能中的其他對象包含,僅被其他對象稱爲。也就是說,你從來沒有一個完整的對象存儲在一個變量,你只是一個指針存儲對象中的變量,所以一個對象不能包含在這個意義上,在C++中,對象可以包含另一個對象的另一個對象。

我不完全知道發生了什麼與你的代碼,因爲你已經不是我們出任意代碼或錯誤,但這裏是你如何能有幾個視圖控制器互相引用:

@interface MyViewController : UIViewController 

@property MyViewController *next; 

@end 


// ...somewhere in your code... 

MyViewController *vc1 = [[MyViewController alloc] initWithNibName:... bundle:...]; 
MyViewController *vc2 = [[MyViewController alloc] initWithNibName:... bundle:...]; 
MyViewController *vc3 = [[MyViewController alloc] initWithNibName:... bundle:...]; 

vc1.next = vc2; 
vc2.next = vc3; 
vc3.next = vc1; 

現在,我使用三個完全相同類型的視圖控制器來保持代碼簡短,但您不必這樣做。他們甚至不一定必須爲next屬性使用相同的名稱。我想鼓勵你避免視圖控制器之間的依賴關係,如果你可以 - 你的每個視圖控制器類真的需要知道下一個是什麼類型?如果你的代碼不這樣做,你的代碼將更容易管理,這樣如果你願意,你可以輕鬆地改變控制器的順序。

相關問題