首页 文章

如何更好地弹出视图控制器?

提问于
浏览
0

我有一个有三个视图的导航控制器 . 可能的导航路线是:

VC1 - > VC3和
VC1 - > VC2 - > VC3

当用户从VC1进入VC2并最终进入VC3时,我希望导航栏中的后退按钮指向VC1(而不是VC2) . 所以在VC2中,我添加了这段代码 .

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    self.navigationController?.popViewController(animated: true)
}

有用;但我可以看到流行音乐发生了 . 当我在VC2上并且在导航到VC3的过程中,我可以看到VC1一秒钟(VC2已从堆栈中弹出),然后我看到VC3 . 它看起来不太好看 .

有没有更好的方法呢?

谢谢 .

6 回答

  • 0

    使用popToRootViewControllerAnimated: . 如果我正确理解您的问题,这正是您所需要的 .

  • 3

    在VC3上按下后退按钮时,可以使用此代码 . 为此,您需要向VC3的后退按钮添加操作 .

    self.navigationController?.popToRootViewController(animated: true)
    
  • 0

    我使用下面的代码从视图控制器堆栈弹出视图 .

    var allViewControllers = navigationController?.viewControllers
    
    allViewControllers?.removeLast(2) //number of views to pop
    
    navigationController?.setViewControllers(viewControllers!, animated: true)
    

    这不会给你视图动画问题 . 希望这可以帮助 . 快乐的编码 .

  • 0

    导航到VC3后,从导航控制器的导航堆栈中删除VC2 . 下面是代码,只需在您的情况下编写视图控制器的索引,或者动态使用它 .

    self.navigationController?.viewControllers.removeAtIndex("insert here a number")

  • 0

    像其他人说的那样使用 popToRootViewController

    但是如果VC1不是你的rootViewController,则在弹出时将此代码添加到VC3

    for vc in (self.navigationController?.viewControllers ?? []) {
      if vc is VC1 {
        _ = self.navigationController?.popToViewController(vc, animated: true)
        break
      }
    }
    
  • 1

    您可以使用以下扩展名直接弹出到任何viewController

    extension UINavigationController {
    
        func popTo(controllerToPop:UIViewController)  {
            var controllersArray = self.viewControllers
            var index = 0
            var isFound = false
            for vc in controllersArray {
                if(vc.isKind(of: controllerToPop.classForCoder))
                {
                    isFound = true
                    break
                }
                index += 1
            }
            if(isFound)
            {
                for i in index+1 ..< controllersArray.count-1
                {
                    controllersArray.remove(at: i)
                }
                self.viewControllers = controllersArray
            }
            self.popViewController(animated: true)
        }
    }
    

相关问题