Увольняющиеся модальные контроллеры вида - PullRequest
2 голосов
/ 11 июля 2010

View Controller A представляет View Controller B модально, который имеет кнопку для представления View Controller C модально.

Вот мой поток:

A presents B which presents C

Когда B представляет C, я хочу, чтобы B был отклонен, поэтому мои единственные контроллеры представления - это A и C. Я не уверен, куда звонить:

[self dismissModalViewControllerAnimated:NO];

чтобы уволить Б.

Я создал шаблон делегирования, где сразу после того, как B представляет C, A отклонит B, но ничего не будет отклонено.

Если B является делегатом C, то C отклоняет себя.

Ответы [ 4 ]

1 голос
/ 27 декабря 2012

Я думаю, что вы можете использовать NSNotificationCenter.Вы можете создать NSNotificationCenter в B, который вызывает метод для отмены самого себя, а затем сделать уведомление от C для вызова NSNotificationCenter в B.

Я не уверен в этом, но это может сработать.

В B добавьте:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(dismissFunction:) name:@"DismissFunction" object:nil];

и метод, подобный этому:

- (void)dismissFunction:(NSNotification*)notification
{
      [self.navigationController dismissModalViewControllerAnimated:YES];
}

А в C добавьте:

[[NSNotificationCenter defaultCenter] postNotificationName:@"DismissFunction" object:nil];
0 голосов
/ 11 июля 2010

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

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

Это означает, что если вы отклоните B, вы также отклоните C

0 голосов
/ 12 июля 2010

просто сделайте это из A

[self.navigationController dismissModalViewControllerAnimated:YES];
0 голосов
/ 11 июля 2010

Для этого следует использовать UINavigationController.

* создать контроллер навигации с контроллером B в качестве корневого контроллера представления.* Представить контроллер навигации как модальный с presentModalViewControler: animated: это будет иметь тот же эффект, что и представление B * Когда B нужно представить C, он помещает его в стек контроллера навигации, вызывая [self.navigationController pushViewController представления: C animated:ДА] * если С нужно отстранить от оскорбления В, вы можете сделать это, вызвав [self.navigationController popViewControllerAnimated: YES] * Если С необходимо отменить и отозвать А, вы можете отменить модальное действие, вызвав [self.navigationController.parentViewController dismissModalAnimated:ДА]

Вы можете пойти на 1 шаг дальше и вообще не использовать модал, добавив A в качестве корневого контроллера представления контроллера навигации и нажав B на контроллер навигации вместо представления его в качестве модального

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