Как вы одновременно получаете модальное представление и предыдущее представление контроллера навигации? - PullRequest
2 голосов
/ 13 ноября 2011

Я не нашел ничего подобного в Google или переполнении стека ...

То, что я пытаюсь сделать, это вывести модальный вид и предыдущий вид одновременно. Например, посмотрите на приложение календари. Когда вы находитесь на экране «Edit» и выбираете «Delete Event», вы возвращаетесь к представлению календаря. Появится экран 'Edit', который был представлен модально, а также экран 'Event' (где пользователь просто просматривает событие календаря). Проблема, с которой я сталкиваюсь, заключается в том, что я знаю, как получить модальное представление ... но из того же подкласса UIViewController (в этом примере - экран "Edit"), как мне открыть представление, не являющееся ' т модал ?

Я думал о том, чтобы вытолкнуть модальное представление, как вы это обычно делаете, затем разместить NSNotification в подклассе Event (например,) экрана UIViewController и сказать ему, чтобы оно также отображало это представление.

Другое дело, что для анимации это должна быть анимация dismissModalViewControllerAnimated (скользить вниз), а не анимация popViewControllerAnimated (слайд влево).

Спасибо.

Также, ищите лучшее решение, чем это , которое не работает в моем случае (по крайней мере, с popViewControllerAnimated)

1 Ответ

10 голосов
/ 16 ноября 2011

Вам необходимо использовать шаблон делегата, чтобы уведомить модальный «родитель» о том, что он должен закрыть модальный контроллер представления (анимированный: НЕТ) и вытолкнуть себя из стека (анимированный: ДА).

Этоименно то, что происходит в приложении «Календарь» - просто обратите внимание на то, что происходит с заголовком панели навигации, когда вы подтверждаете удаление события - вы можете быстро увидеть, как заголовок меняется с «Редактировать» на «Сведения о событии», поскольку это представление отключается.стек навигации.

Итак, в двух словах, если мы говорили о приложении календаря, в вашем контроллере модального представления создайте протокол с помощью метода, подобного didConfirmEventDeletion:

@protocol ModalViewDelegate <NSObject>
- (void)didConfirmEventDeletion;
@end

@interface ModalViewController...

@property (nonatomic, assign) id<ModalViewDelegate> delegate;

@end     

И реализация:

@implementation ModalViewController

- (void)deleteEventMethod
{
    ...
    if ([self.delegate respondsToSelector:@selector(didConfirmEventDeletion)])
         [self.delegate didConfirmEventDeletion];
}

Затем в вашем родительском контроллере представления объявите себя в качестве делегата для модального объекта и реализуйте didConfirmEventDeletion:

- (void)didConfirmEventDeletion
{
    [self dismissModalViewControllerAnimated:NO];
    [self.navigationController popViewControllerAnimated:YES];
}

PS: может быть несколько опечатоккак я написал этот код из памяти ...

...