2011-08-22 40 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]; 
} 
相关问题