2013-11-19 2 views
0

Мой вопрос в том, что у меня есть один главный UIViewController, который позволяет передавать через него три других UIViewControllers, но мне интересно, есть ли способ, который как только я увольню одного из трех других контроллеров, можно ли уведомить главного UIViewController или сообщить, что он появился из-за увольнения указанного контроллера?Есть ли способ увидеть, появился ли текущий UIViewController из-за увольнения другого UIViewController

Благодарим вас за продвинутый!

ответ

0

Если ваш главный контроллер представления реализует:

  • (аннулируются) dismissViewControllerAnimated: (BOOL) завершение флага: (вакуум (^) (пустот)) завершение

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

+0

Я извиняюсь, я добавил, что метод моего основного контроллера представления, но, как я, посылая сообщение назад от другой контроллер? Я очень незнакома с использованием блоков завершения ... Спасибо! – D34thSt4lker

+0

Не требуется блок завершения. Из вашего видимого в настоящее время контроллера просмотра сделайте это, чтобы его уволили: [self.presentingViewController rejectViewControllerAnimated: YES nil]; –

0

Когда вы закроете один из трех ViewControllers, вы могли бы сигнализировать к главному ViewController, что они были уволены через NSNotification:

NSDictionary *viewControllerInfo = @{@"ViewControllerClass" : NSStringFromClass([self class])} 
    [[NSNotificationCenter defaultCenter] postNotificationName:@"ViewControllerDismissed" object:nil userInfo:viewControllerInfo]; 

И в главном ViewController:

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

И ответьте этим методом:

- (void)viewControllerDismissed:(NSNotification *)notification { 
    NSDictionary *viewControllerInfo = [notification userInfo]; 

    // Dictionary should be same as the one passed through the noticiation. 
} 

Дополнительное примечание: Если вы используя UIStoryboard, то вы можете использовать unwind segue.

EDIT: Обновленный словарь использовать NSStringFromClass()

+0

Sweet awesome, который сработал! Но нет, я не использую раскадровки. Также, вопрос, касающийся вашего ответа ... Что делать, если мне все равно, какой из трех диспетчеров зрения уволен? Я просто хочу получить тот же эффект, как только они будут уволены. Что я могу удалить оттуда? – D34thSt4lker

+0

Хорошо, неважно, на этот вопрос. Я удалил NSDictionary, и он пройдет. Спасибо! – D34thSt4lker

+0

Мне любопытно: если вам не нравится, какой viewController отклоняется, не могли бы вы просто добавить логику в свой вид viewController viewWillAppear/viewDidAppear, чтобы вызвать любые действия, которые вы хотите после увольнения? Вы можете установить BOOL, когда вы представляете контроллер вида, который можно использовать в viewWillAppear, чтобы определить, было ли вызвано отклонение viewController или нет. (Кроме того, если вы удовлетворены моим первоначальным ответом, можете ли вы пометить его как принятый?) –

Смежные вопросы