繁体   English   中英

以编程方式将视图控制器添加到导航控制器,然后推送另一个视图控制器

[英]Add viewcontroller to navigation controller programmatically then push another view controller

我想在导航控制器的视图控制器数组中附加几个视图控制器,然后想要推送同一导航控制器的第三个视图控制器。 我的代码如下

let navigationController = getCurrentNavController()

let listVC = UIStoryboard.loadListViewController()
navigationController.viewControllers.append(listVC)
                
let detailVC = UIStoryboard.loadDetailsViewController()
navigationController.viewControllers.append(detailVC)
                
let thirdVC = UIStoryboard.loadThird()
navigationController.pushViewController(thirdVC, animated: true)

第三个VC是在导航控制器上推送,问题是当我弹出第三个VC时,我没有找到detailVC或listVC。 这可能吗? 如果是,请帮忙。

不要直接编辑viewControllers数组。 这就是animated参数存在的原因。

一个解决方案可能是通过执行以下操作在 0.25 秒(推送动画的持续时间)之后添加 viewControllers:

let navigationController = getCurrentNavController()
var viewControllers = navigationController.viewControllers

let listVC = UIStoryboard.loadListViewController()
viewControllers.append(listVC)
                
let detailVC = UIStoryboard.loadDetailsViewController()
viewControllers.append(detailVC)
                
let thirdVC = UIStoryboard.loadThird()
viewControllers.append(thirdVC)
navigationController.pushViewController(thirdVC, animated: true)

DispatchQueue.main.asyncAfter(now() + 0.25) {
    navigationController.setViewControllers(viewControllers, animated: false)
}

如前所述,您不想直接修改导航控制器的viewControllers

但是,您也不需要进行任何明确的“推送”:

    let navigationController = getCurrentNavController()

    let listVC = UIStoryboard.loadListViewController()
    let detailVC = UIStoryboard.loadDetailsViewController()
    let thirdVC = UIStoryboard.loadThird()

    var vcs = navigationController.viewControllers

    vcs.append(listVC)
    vcs.append(detailVC)
    vcs.append(thirdVC)

    navigationController.setViewControllers(viewControllers, animated: true)

这将从当前视图控制器中为thirdVC设置动画,就像您已经推送它一样,但它还会将listVCdetailVC插入导航控制器的堆栈中,因此“后退”按钮将带您浏览detailVClistVC

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM