2014-12-17 9 views
3

Я хочу вернуться на два уровня в стеке контроллера. У меня есть три сегмента в этом порядке: Show, Show, Present Modally. Используется навигационный контроллер. С моего 4-го представления я хочу вернуться ко второму виду. Я попытался с помощью self.presentingViewController?.presentingViewController?.navigationController?.popViewControllerAnimated(false);Dismiss and Pop a view controller

и

self.presentingViewController?.presentingViewController?.dismissViewControllerAnimated(false, completion: nil);

Второй работает только если второй и 3 перетекает как «Present модально». Как я могу заставить их работать с увольнением и поп-музыкой?

+0

Похоже, вы должны отклонить представленный контроллер представления, прежде чем появляются два других. –

+0

Вместо этого вы можете использовать разматывать segue. – rdelmar

+0

@rdelmar Вы можете использовать только разматывать сеанс, если вы используете раскадровку, верно? –

ответ

5

Try отклоняя представленный контроллер представления, прежде чем появляются два других:

func dismissThenDoublePop() { 

    // Get the presenting/previous view 
    let previousView = self.presentingViewController as UINavigationController 

    // Dismiss the current view controller then pop the others 
    // upon completion 
    self.dismissViewControllerAnimated(true, completion: { 

     // Get an array of the current view controllers on your nav stack 
     let viewControllers: [UIViewController] = previousView.viewControllers as [UIViewController]; 

     // Then either pop two view controllers, i.e. pop 
     // to viewControllers[viewControllers.count - 2], or 
     // pop to the second view controller in the nav stack, 
     // i.e. viewControllers[1]. (In this case I've used the 
     // first option.) 
     self.navigationController!.popToViewController(viewControllers[viewControllers.count - 2], animated: true); 

    }); 
} 
+0

Он попадает в строку, начинающуюся с 'let viewControllers: ...' и вылетает с «фатальной ошибкой: неожиданно найден nil при разворачивании необязательного значения» – Ricca

+0

@ Ricca Да, вы правый навигационный контроллер нуль в представленном виде контроллер. Теперь смотрим в альтернативу. –

+0

@Ricca OK, я обновил свой ответ, чтобы получить предыдущее представление как UINavigationController перед блоком rejectView. Я тестировал этот код, и он работает для меня. –

-1

используется как этот.

self.navigationController?.popViewControllerAnimated(true) 
0

Просто позвоните dismissViewControllerAnimated .Это будет автоматически отклонять все контроллеры просматривать в том числе представлены модель viewcontroller.

Цель - C

[self.navigationController dismissViewControllerAnimated:YES completion:nil]; 

Swift

self.navigationController?.dismissViewControllerAnimated(false, completion: nil);