1

Мой вопрос похож на: iPhone modal view inside another modal view? и Can I push a modal view controller from within another modal view controller?, однако есть одна разница:iPhone - раскрой presentModalView в другой модальный Посмотреть

Ни один из моих контроллеров не UINavigationControllers (я думаю, вот что они называются).

Так в основном у меня есть это:

RootView (различные варианты, такие как представить расходы, проверить календарь и т.д.) -> представить расходы выбраны и следующий код называется:

EXP = [[ExpensesViewController alloc] initWithNibName:@"ExpensesViewController" bundle:nil]; 

    [self presentModalViewController:EXP animated:YES]; 

Так теперь на главном экране есть один modalview. Затем в рамках модального вида расходов я хотел бы иметь возможность выбрать кнопку, которая открывает модальный вид (в аналогичном коде) ...

Я понимаю из двух вопросов в своем вступительном слове выше этого, чтобы сделать это в основном это выглядит следующим образом:

[controllerA presentModalViewController:Number2 animated:YES]; 

Может выглядеть вместо этого:

[self.view presentModalViewController:Number2 animated:YES]; 

, потому что я не знаю, как ссылаться на ViewController без создания нового экземпляра этого.

Кроме того, когда приходит время отклонить второй, чтобы я мог вернуться к первому виду мода (в основном я открываю modalview для отправки расходов, а затем как часть формы, они должны выбрать выбор - для В пользовательском интерфейсе лучше всего подходит новый modalview. После того, как они решат выбор, они возвращаются к просмотру расходов, закрывая дополнительное подробное модальное представление, чтобы отправить счет, и как только они это сделают, тогда это модальное представление закрывается).

Таким образом, вместо того, чтобы использовать:

[self dismissModalViewControllerAnimated:YES]; 

было бы:

[self.view dismissModalViewControllerAnimated:YES]; 

??

Спасибо, ребята :)

ответ

1

Только UIViewController и его подклассы могут представлять модальные контроллеры просмотра. self.view является экземпляром UIView и чем-то совершенно другим.

Для того, чтобы спасти себя наделите работы вы должны придерживаться двух правил:

  1. только представить новые модальные контроллеры вида из контроллера представления следующим образом: [self presentModal…];.
  2. Только отклоните контроллер модального представления от представленного контроллера вида, например: [self dismiss…];.

Таким образом, у вас есть четкое представление о владении и ответственности каждого контроллера вида. Кроме того, метод, который я видел почти везде, использует верхний уровень [self.super dismiss…];, чтобы отклонить контроллер вида, который будет работать на iOS 5.

+0

Ха-ха, получается, что вложенность присутствуетModalViewController вызывает в классах viewcontroller, а затем просто отбрасывает их из одного и того же класса VC отлично работает. Спасибо :) –

0

Здесь вам нужно использовать шаблон делегата.Сделайте делегат контроллера корневого каталога первого, первого контроллера представления делегатом второго и так далее.

Если вы хотите отклонить вызов метода делегата, а затем вы можете отклонить представление, используя собственную ссылку.

Итак, во втором диспетчере просмотра вы будете звонить [delegate dismissTheView], который будет реализован в первую очередь и вызовет [self dismissModalViewControllerAnimated]; и последует за ним, пока не достигнет вашего последнего вида.

+0

Я не очень хорошо знаком с делегатами, но я уверен, что это сработает :) –