I’m developing a menu for a game. The menu contains four buttons; Campaign, Training, Highscore and Settings.
When I click one of these buttons, a new view controller should be shown. I add the new view controller using this function:
[self.view addSubview:myViewController.view];
It does show the new view controller, but I can still touch the menu buttons from the other view controller that is “behind” the new. I can’t see the buttons, but when I touch in the area of a button, the button’s IBAction is called.
Of course, I can disable all buttons before adding the subview, but is this the right way to fix it? Should I remove the menu from its subview? I’m using a window-based application and do not have a tab bar or a navigation bar.
Thank you very much!
You need to remove the old view from the screen when you add the new one. Three ways to do this, from my most preferred to least preferred:
Use a navigation controller and just turn off the navigation bar (by setting
self.navigationController.navigationBarHiddentoYES).Use
presentModalViewController:animated:, as subw recommends.Do the following instead of what you’re doing currently:
There are two main differences between the three approaches.
One is the animation involved. #1 slides the new screen in from the right. #2 slides it up from the bottom (or cross-dissolves or flips, depending on your preference). #3 does not have any animation by default.
The other is how you go back to the menu. In #1, any part of your code (more or less) can call (
[self.navigationController popViewControllerAnimated:YES]. In #2, the child view controller calls[self.parentController dismissModalViewControllerAnimated:YES]. #3 has no simple way to go back; you have to do it manually, which involves keeping a reference to the menu view controller in each of the other view controllers.