在iPhone应用程序中其他ViewController后面的ViewController

时间:2010-01-31 15:34:17

标签: iphone uiviewcontroller

我正在为游戏开发菜单。菜单包含四个按钮;广告系列,培训,高分和设置。 单击其中一个按钮时,应显示新的视图控制器。我使用这个函数添加新的视图控制器:

[self.view addSubview:myViewController.view];

它确实显示了新的视图控制器,但我仍然可以触摸新视图“后面”的其他视图控制器中的菜单按钮。我看不到按钮,但当我触摸按钮区域时,按钮的IBAction被调用。

当然,我可以在添加子视图之前禁用所有按钮,但这是解决它的正确方法吗?我应该从子视图中删除菜单吗?我使用的是基于窗口的应用程序,没有标签栏或导航栏。

非常感谢!

3 个答案:

答案 0 :(得分:2)

您可以使用模态视图:

[self presentModalViewController:myViewController animated:YES];

我认为这是正确的做法。

答案 1 :(得分:0)

你现在正在做的唯一问题是接触是通过传递而不是由新视图处理。我会在菜单上方一级,删除菜单并添加新视图。如果您需要返回菜单,请执行相反的操作。我倾向于使用presentModalViewController来做一些简短的事情,比如首选项,但是对于整个游戏我会卸载菜单。这是你的电话。

答案 2 :(得分:0)

添加新视图时,您需要从屏幕中删除旧视图。有三种方法,从我最喜欢的方式到最不喜欢的方式:

  1. 使用导航控制器,只需关闭导航栏(将self.navigationController.navigationBarHidden设置为YES)。

  2. 使用presentModalViewController:animated:,作为subw推荐。

  3. 执行以下操作而不是您当前正在执行的操作:

    [self.view.window addSubview:myViewController.view];
    [self.view removeFromSuperview];
    
  4. 这三种方法有两个主要区别。

    一个是涉及的动画。 #1从右侧滑入新屏幕。 #2从底部向上滑动(或交叉溶解或翻转,具体取决于您的喜好)。 #3默认没有任何动画。

    另一个是你如何回到菜单。在#1中,代码的任何部分(或多或少)都可以调用([self.navigationController popViewControllerAnimated:YES]。在#2中,子视图控制器调用[self.parentController dismissModalViewControllerAnimated:YES]。#3没有简单的方法可以返回;你有手动完成,包括在每个其他视图控制器中保持对菜单视图控制器的引用。