我正在为游戏开发菜单。菜单包含四个按钮;广告系列,培训,高分和设置。 单击其中一个按钮时,应显示新的视图控制器。我使用这个函数添加新的视图控制器:
[self.view addSubview:myViewController.view];
它确实显示了新的视图控制器,但我仍然可以触摸新视图“后面”的其他视图控制器中的菜单按钮。我看不到按钮,但当我触摸按钮区域时,按钮的IBAction被调用。
当然,我可以在添加子视图之前禁用所有按钮,但这是解决它的正确方法吗?我应该从子视图中删除菜单吗?我使用的是基于窗口的应用程序,没有标签栏或导航栏。
非常感谢!
答案 0 :(得分:2)
您可以使用模态视图:
[self presentModalViewController:myViewController animated:YES];
我认为这是正确的做法。
答案 1 :(得分:0)
你现在正在做的唯一问题是接触是通过传递而不是由新视图处理。我会在菜单上方一级,删除菜单并添加新视图。如果您需要返回菜单,请执行相反的操作。我倾向于使用presentModalViewController来做一些简短的事情,比如首选项,但是对于整个游戏我会卸载菜单。这是你的电话。
答案 2 :(得分:0)
添加新视图时,您需要从屏幕中删除旧视图。有三种方法,从我最喜欢的方式到最不喜欢的方式:
使用导航控制器,只需关闭导航栏(将self.navigationController.navigationBarHidden
设置为YES
)。
使用presentModalViewController:animated:
,作为subw推荐。
执行以下操作而不是您当前正在执行的操作:
[self.view.window addSubview:myViewController.view];
[self.view removeFromSuperview];
这三种方法有两个主要区别。
一个是涉及的动画。 #1从右侧滑入新屏幕。 #2从底部向上滑动(或交叉溶解或翻转,具体取决于您的喜好)。 #3默认没有任何动画。
另一个是你如何回到菜单。在#1中,代码的任何部分(或多或少)都可以调用([self.navigationController popViewControllerAnimated:YES]
。在#2中,子视图控制器调用[self.parentController dismissModalViewControllerAnimated:YES]
。#3没有简单的方法可以返回;你有手动完成,包括在每个其他视图控制器中保持对菜单视图控制器的引用。