ios – 在导航堆栈中跳过/添加视图控制器

前端之家收集整理的这篇文章主要介绍了ios – 在导航堆栈中跳过/添加视图控制器前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有三个视图控制器嵌入导航控制器.我想从VC1到VC3,以便在VC3中,导航项的后退按钮可以将用户定向到VC2而不是VC1.我认为这应该是通过在VC3创建之后将VC2添加到VC1和VC3之间的导航堆栈或通过跳过第二个View Controller来完成的.

我试过这个:

override func prepareForSegue(segue: UIStoryboardSegue,sender: AnyObject?) {
    if let identifier = segue.identifier {
        switch identifier {
        case "JumpToThirdVCSegue":
            if let secondvc = segue.destinationViewController as? SecondViewController {
                secondvc.performSegueWithIdentifier("ThirdVCSegue",sender: self)
            }
        default: break
        }
    }
}

但我不能让它工作.当View Controller尚未打开时,是否可能执行segue?

跳过视图控制器或在导航堆栈中添加视图控制器的最佳方法是什么?我希望这可以帮助你了解我正在做的事情:

解决方法

这样的事情应该有效:
self.navigationController?.pushViewController(viewController2,animated: true)
    self.navigationController?.pushViewController(viewController3,animated: true)

编辑:

如果您希望推送第二个视图控制器,而不会被用户注意到,则在按下第三个视图控制器之后,您需要将其添加到导航控制器.这可以通过实现UINavigationControllerDelegate来实现.您可以将第二个视图控制器存储在变量中,并使用委托方法将其插入到导航控制器层次结构中.您的主视图控制器将如下所示:

class MyViewController: UIViewController,UINavigationControllerDelegate {

    var viewControllerToInsertBelow : UIViewController?

    override func viewDidLoad() {
        super.viewDidLoad()
        self.navigationController?.delegate = self
    }

    func pushTwoViewControllers() {
        if let viewController2 = self.storyboard?.instantiateViewControllerWithIdentifier("id1"),let viewController3 = self.storyboard?.instantiateViewControllerWithIdentifier("id2") { //change this to your identifiers
                self.viewControllerToInsertBelow = viewController2
                self.navigationController?.pushViewController(viewController3,animated: true)
        }
    }

    //MARK: - UINavigationControllerDelegate
    func navigationController(navigationController: UINavigationController,didShowViewController viewController: UIViewController,animated: Bool) {
        if let vc = viewControllerToInsertBelow {
            viewControllerToInsertBelow = nil
            let index = navigationController.viewControllers.indexOf(viewController)!
            navigationController.viewControllers.insert(vc,atIndex: index)
        }
    }

}
原文链接:https://www.f2er.com/iOS/329266.html

猜你在找的iOS相关文章