【问题标题】:Add viewcontroller to navigation controller programmatically then push another view controller以编程方式将视图控制器添加到导航控制器,然后推送另一个视图控制器
【发布时间】:2021-02-03 08:12:36
【问题描述】:

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

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是在导航控制器上推送, 问题是当我弹出thirdVC时, 我没有找到 detailVC 或 listVC。 这可能吗? 如果是,请帮忙。

【问题讨论】:

    标签: ios swift uinavigationcontroller


    【解决方案1】:

    如前所述,您不想直接修改导航控制器的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

    【讨论】:

      【解决方案2】:

      不要直接编辑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)
      }
      

      【讨论】:

      • 工作 ;-) 谢谢,一个疑问是为什么我需要推送 thirdVC 如果我将它附加到 viewControllers 数组中
      猜你喜欢
      • 2014-01-11
      • 2016-09-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多