3

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

Я также попытался заменить эту строку кода на 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); 
} 

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

ответ

1

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

This is the correct way of placing the navigation controller:

+0

Этот ответ может быть правильным, но плохо объяснен. Заполните ответ – voghDev

0

У меня была аналогичная проблема. Моя проблема была:

sourceViewController.navigationController == nil 

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

Editor > Embed in > Navigation controller 

Затем Xcode генерируется три ViewControllers: Один начальный NavigationController, затем SourceViewController и DestinationViewController.

Теперь пользовательский режим segue работает.

Сообщите мне, если это помогло ya :-)

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