2014-10-21 8 views
2

У меня есть контроллер навигации A, на который я нажимаю контроллер B. из B, я представляю модально контроллер вида C. Мне нужно одновременно отпустить C и pop B. Я хотел бы, что в последовательности, сохраняя при этом смещать анимацию первым, а затем поп-анимации от B к A. Я безуспешно пытался этот код:Контроллер pop view после увольнения

Любое предложение о том, как я могу добиться этого?

+0

проверить, если навигация контроллер не ноль ...? –

+0

Этот вход в мою кнопку дает «null» 'NSLog (@"% @ ", self.presentingViewController.navigationController);' Не могу понять, почему. Мне нужно, может быть, создать ссылку на контроллер вида? – Diego

ответ

0

Если вы пишете в C viewcontoller тогда:

UIViewController *pvc = self.presentingViewController; 
UINavigationController *navController = [pvc isKindOfClass:[UINavigationController class]] ? (UINavigationController *)pvc : pvc.navigationController; 
[self dismissViewControllerAnimated:YES completion:^{ 
    [navController popViewControllerAnimated:YES]; 
}]; 

или если в B контроллере представления

[self.presentedViewController dismissViewControllerAnimated:YES completion:^{ 
    [self.navigationController popViewControllerAnimated:YES]; 
}]; 
+0

Кнопка находится на C. Я пробовал ваш код, кажется, не работает. – Diego

+0

На самом деле self.presentingViewController возвращает UINavigationController. См. Мой обновленный ответ. –

+0

@paragShinde любая хорошая причина, по которой мы проверяем это: [pvc isKindOfClass: [UINavigationController class]] – skypirate

0

Вы используете раскадровки и перетекает? Если да, то вы можете использовать разматывания SEGUE:

В своем первом контроллере представления (тот, который вы хотите, чтобы перейти обратно к , а не тот, который вы возвращаются из), создать разматывания действие SEGUE:

- (IBAction)gotoMainMenu:(UIStoryboardSegue *)segue 
{ 
    // if you need to do anything when you return to the main menu, do it here 
} 

Затем в раскадровке, вы можете создать SEGUE от кнопки «распускать» на значок выпускного выхода (enter image description here) в баре над сценой, и вы увидите main menu перечисленные там.

+0

Извините, я должен был указать, я использую xib-файлы. – Diego

+0

Понял. Я сохраню этот ответ здесь, если будущие читатели, которые используют раскадровки, спотыкаются на этот вопрос. – Rob

1

Я пробовал выскакивать два раза подряд, но не отбрасываю один и выскакиваю еще один. Вы можете попробовать, что я сделал, и посмотреть, работает ли это для вас.

В подвид B:

- (void)subViewCController:(SubViewCController *)controller didSelectID:(NSNumber *)theID 
{ 
    // do something with theID... 
    // for my case, I popped 
    // [self.navigationController popViewControllerAnimated:YES]; 

    // for your case 
    [self dismissViewControllerAnimated:YES completion:nil]; 

    // Somehow, adding a small delay works for me and the animation is just nice 
    [self performSelector:@selector(backToSubViewA) withObject:nil afterDelay:0.6]; 
} 

- (void)backToSubViewA 
{ 
    [self.navigationController popViewControllerAnimated:YES]; 
}