[英]Navigation Controller is not loading ( push , present ) another viewController
[英]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
设置动画,就像您已经推送它一样,但它还会将listVC
和detailVC
插入导航控制器的堆栈中,因此“后退”按钮将带您浏览detailVC
和listVC
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.