NavigationController.pushViewController в Custom Segue не работает — Swift 2.0 — iOS 9.1

Я пишу пользовательский переход в UIStoryboardSegue. Я использую CATransition для создания пользовательской анимации справа налево. Если бы я использовал sourceViewController.navigationController?.pushViewController(destinationViewController, animated: false);, это не привело бы меня ко второму представлению. Он просто выполняет анимацию справа налево и остается на первом виде. Я отладил этот код и обнаружил, что sourceViewController.navigationController равен нулю. У меня есть UINavigationController между первым и вторым представлениями.

Я также попытался заменить эту строку кода на sourceViewController.presentViewController(destinationViewController, animated: false, completion: nil);. Переход действительно происходит, но происходит слишком быстро, поэтому я не вижу анимацию справа налево.

Мой полный код в этом UIStoryboardSegue выглядит следующим образом:

override func perform() {


    let sourceViewController = self.sourceViewController as UIViewController;
    let destinationViewController = self.destinationViewController as UIViewController;
    let transition: CATransition = CATransition()

    transition.duration = 0.25;
    transition.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut)
    transition.type = kCATransitionPush;
    transition.subtype = kCATransitionFromRight;

    sourceViewController.view.layer.addAnimation(transition, forKey: "kCATransition")

    sourceViewController.navigationController?.pushViewController(destinationViewController, animated: false);
}

Большое спасибо за Вашу помощь




Ответы (2)


Использование sourceViewController.pushViewController правильно. Причина, по которой я не получал sourceViewController.navigationController, заключалась в том, что я поместил контроллер навигации между первым и вторым представлениями. Правильный способ размещения навигационного контроллера — разместить его перед первым представлением.

Это правильный способ размещения навигационного контроллера:

person Arthur Liu    schedule 04.11.2015
comment
Этот ответ может быть правильным, но плохо объяснен. Пожалуйста, дополните ответ - person voghDev; 29.11.2015

У меня была похожая проблема. Моя проблема была:

sourceViewController.navigationController == nil

В файле раскадровки SourceViewController щелкните ViewController, а затем:

Editor > Embed in > Navigation controller

Затем Xcode сгенерировал три ViewController: один начальный NavigationController, затем SourceViewController и DestinationViewController.

Теперь пользовательский переход работает.

Дайте мне знать, если это помогло вам :-)

person voghDev    schedule 29.11.2015