2011-08-22 18 views
0

我有一個簡單的應用程序,有3個視圖,HomeView,MenuView和GameView。什麼是適當的方式來顯示從視圖中的新視圖,然後返回到iphone

在HomeView我有2個按鈕(菜單和開始遊戲)。當點擊菜單按鈕,我用下面的代碼打開MenuView:

- (IBAction)displayMenu:(id)sender{ 
    MenuView *mv = [[MenuView alloc] init]; 
    [self.view addSubView:[mv view]; 
    [mv release]; 
} 

在MenuView,我有一個按鈕,允許用戶返回到HomeView。當點擊這個按鈕,我用下面的代碼返回HomeView

- (IBAction)returnToHome:(id)sender{ 
    HomeView* hv = [[HomeView alloc] init]; 
    [self.view addSubView:[hv view]; 
    [hv release]; 
} 

上面的代碼工作,但是這是做的正確方法是什麼?我的印象是,當我打電話給addSubView時,視圖將保留,所以如果在HomeView和MenuView之間來回移動,我是否會保留HomeView和MenuView的多個實例,因爲我一直從每個視圖調用addSubView?

謝謝。

回答

1

你可以使用UINavigationController,這將允許您在堆棧推UIViewControllers 。 使用UINavigationController您將在屏幕頂部和後退按鈕中獲得一個漂亮的naviagtionbar。

你可以找到一個很好的例子在這裏:http://developer.apple.com/library/ios/#documentation/uikit/reference/UINavigationController_Class/Reference/Reference.html

+0

是否有可能使用UINavigationController但在導航欄中沒有後退按鈕?我問這個的原因是因爲當我到達最後一個視圖(又名結果視圖)時,我不希望它們能夠返回到前一個屏幕。我希望他們只能返回到HomeView – atbebtg

+0

它看起來像我可以設置「navigationBarHidden」爲YES,它應該完成我想要做的事情。謝謝 – atbebtg

1

我發現這種方式最有用和方便。當調用新的視圖使用此:

HomeView* hv = [[HomeView alloc] init]; 
     (here you can add a uninavigation controller) 
    [self presentModalViewController:hv animated:YES]; 

然後駁回這一觀點,回去使用:

[self dismissModalViewControllerAnimated:YES]; 
1

@atbebtg:

有一種方法可以做到這一點,事實上有幾個,因爲不是真的是「正確的方式」來做到這一點。

對於我這個工作得很好:

[[self navigationController] setNavigationBarHidden:YES animated:NO]; 

這將隱藏的導航欄,使用戶無法回到過去的畫面。

你可以做的另一件事是創建自己的UIViewController的子類,不支持該按鈕的事件,像這樣:

- (IBAction)done:(id)sender 
{ 
    //inform the user, that going back is not possible, for example with UIAlertView 
    //[self.delegate infoViewDidFinish:self]; 
} 

但是,這個方案似乎有點奇怪,因爲用戶需要一個現有的按鈕才能工作。 不過,這會起作用。

1

其他人已經給出了現在的模式視圖控制器或構建導航堆棧的答案。在大多數情況下,我會使用這些方法之一。然而,解決問題中代碼的最簡單方法就是從超級視圖中刪除菜單視圖。這樣的事情:

- (IBAction)returnToHome:(id)sender{ 
    [self.view removeFromSuperview]; 
} 
相關問題