簡體   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