Возможно, вы идете хорошо, не представляя модальный контроллер представления, а используя UIViewController
, который управляет нижележащими контроллерами представления.
Аналогично этому:
// MainNavigationController extends UINavigationController
@property (nonatomic,retain) UIViewController childViewController
-(void)viewDidLoad {
self.childViewController = [MenuViewController alloc] initWithNibName...];
[self pushViewController:childView...];
}
-(void)launchGame {
self.childViewController = [GameViewController alloc] ... ];
self.viewControllers = [NSArray array];
[self pushViewController:childView...];
}
Таким образом, вы постоянно держите ссылку на текущий контроллер вида и управляете отображением их в одном месте.
Вы также должны передать обоим дочерним контроллерам представления ссылку на MainNavigationController
, чтобы можно было использовать методы делегата.
редактирование:
Чтобы прояснить ситуацию с первым комментарием: Да, MainNavigationController
- это отправная точка вашего приложения, которая управляет отображением меню и самой игры.
Строка self.viewControllers = [NSArray array]
используется, чтобы просто очистить список текущих контроллеров представления при запуске игры. Это делается для того, чтобы заменить меню игрой, а не просто нажать на нее. Таким образом, у вас нет 8 контроллеров представления, когда пользователь переходит в меню, в игру, в меню и так далее.
Аналогичный метод будет использоваться для открытия меню во время игры: кнопка попросит MainViewController открыть меню. Вы можете использовать тот же метод, что и метод launchGame
, или вы можете , а затем представить его модальным способом, чтобы сохранить состояние игры, или вы можете поместить небольшое игровое меню перед тем или иным способом - многими способами. обрабатывать вещи оттуда.