ViewController за другим ViewController в приложении для iPhone - PullRequest
0 голосов
/ 31 января 2010

Я разрабатываю меню для игры. Меню содержит четыре кнопки; Кампания, Обучение, Рекорд и Настройки. Когда я нажимаю одну из этих кнопок, должен отображаться новый контроллер вида. Я добавляю новый контроллер вида, используя эту функцию:

[self.view addSubview:myViewController.view];

Он показывает новый контроллер представления, но я все еще могу касаться кнопок меню другого контроллера представления, который находится "за" новым. Я не вижу кнопок, но когда я касаюсь области кнопки, вызывается IBAction кнопки.

Конечно, я могу отключить все кнопки перед добавлением подпредставления, но правильно ли это исправить? Должен ли я удалить меню из его подпредставления? Я использую оконное приложение и у меня нет панели вкладок или панели навигации.

Большое спасибо!

Ответы [ 3 ]

2 голосов
/ 31 января 2010

Вы можете использовать модальное представление:

[self presentModalViewController:myViewController animated:YES];

Я думаю, это был бы правильный способ сделать это.

0 голосов
/ 31 января 2010

Вам нужно удалить старый вид с экрана при добавлении нового. Три способа сделать это, от моего наиболее предпочтительного до наименее предпочтительного:

  1. Используйте контроллер навигации и просто отключите панель навигации (установив self.navigationController.navigationBarHidden в YES).

  2. Используйте presentModalViewController:animated:, как рекомендует subw.

  3. Делайте следующее вместо того, что вы делаете в настоящее время:

    [self.view.window addSubview:myViewController.view];
    [self.view removeFromSuperview];
    

Между этими тремя подходами есть два основных различия.

Одним из них является задействованная анимация. # 1 скользит новый экран справа. # 2 сдвигает его снизу вверх (или перекрестно растворяет или переворачивает, в зависимости от ваших предпочтений). # 3 по умолчанию не имеет анимации.

Другой способ - вернуться в меню. В # 1 любая часть вашего кода (более или менее) может вызывать ([self.navigationController popViewControllerAnimated:YES]. В # 2 контроллер дочернего представления вызывает [self.parentController dismissModalViewControllerAnimated:YES]. # 3 не имеет простого способа вернуться назад, вы должны сделать это вручную , который включает в себя сохранение ссылки на контроллер представления меню в каждом из других контроллеров представления.

0 голосов
/ 31 января 2010

Единственная проблема с тем, что вы делаете сейчас, заключается в том, что касания передаются, а не обрабатываются вашим новым видом. Я бы поднялся на один уровень выше меню, удалил меню и добавил новый вид. Если вам нужно вернуть меню обратно, сделайте наоборот. Я склонен использовать presentModalViewController для коротких вещей, таких как настройки, но для полной игры я бы выгрузил меню. Хотя это ваш звонок.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...