iPhone - вложение presentModalView в другое модальное представление - PullRequest
2 голосов
/ 02 августа 2011

Мой вопрос похож на: Модальное представление iPhone внутри другого модального вида? и Могу ли я выдвинуть контроллер модального вида из другого контроллера модального вида? , однако есть одно отличие:

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

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

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

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

    [self presentModalViewController:EXP animated:YES];

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

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

[controllerA presentModalViewController:Number2 animated:YES];

Может ли это выглядеть так:

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

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

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

Так что вместо использования:

[self dismissModalViewControllerAnimated:YES];

это будет:

[self.view dismissModalViewControllerAnimated:YES];

??

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

Ответы [ 2 ]

2 голосов
/ 02 августа 2011

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

Чтобы сэкономить на работе, вы должны придерживаться двух правил:

  1. Представлять новые модальные контроллеры вида только из контроллера вида, например так: [self presentModal…];.
  2. Отклонить модальный контроллер вида только от представляемого контроллера вида, например: [self dismiss…];.

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

0 голосов
/ 02 августа 2011

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

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

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

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