如何从另一个导航控制器
我登录了系统的用户时,提出上述VC根视图控制器的导航控制器用户注册时,我希望他们要经过一个教程,本教程是已经出现在HomeVC以几种不同的方式。我不希望创建教程的一个克隆,并把它贴在注册过程中,我的感觉是很容易的出路..寻找最好的做法:)如何从另一个导航控制器
所以注册后,这是我什么做
//0. Currently in "Signup" Nav stack
//1. init VCs for new nav stack
//2. push tutorial onto HomeVC nav w/o animation
//3. present stack with HomeVC below Tutorial, but tutorial is what animates in since in on top?
//@1.
let HomeVC = UIStoryboard(name: "Home", bundle: nil).instantiateViewController(withIdentifier: "HomeViewNavigationController")
let TutorialVC = UIStoryboard(name: "Tutorial", bundle: nil).instantiateViewController(withIdentifier: "TutorialViewController")
//@2.
HomeVC.navigationController?.pushViewController(TutorialVC, animated: false);
//@ 3.
self.present(HomeVC, animated: true)
问题是,“HomeVC”将首先闪烁,然后它将动画“TutorialVC”。
相当肯定我只是构造此相当差, 预先感谢
的导航控制器对象管理使用导航堆,这是由视图控制器的阵列表示当前所显示的屏幕
数组中的最后一个视图控制器当前正在显示的视图控制器。
所以,你可以创建viewcontroller
array
,并将其分配到的NavigationController
var viewControllers: [UIViewController]
一个viewControllers
财产不需要推TutorialVC
进入HomeVC
欲了解更多信息https://developer.apple.com/documentation/uikit/uinavigationcontroller
使用navigationController的viewControllers属性来创建你想堆。 使用下面的代码
let HomeVC = UIStoryboard(name: "Home", bundle: nil).instantiateViewController(withIdentifier: "HomeViewNavigationController")
let TutorialVC = UIStoryboard(name: "Tutorial", bundle: nil).instantiateViewController(withIdentifier: "TutorialViewController")
//@2.
let navigationController = UINavigationController(rootViewController: HomeVC);
//@3.
navigationController.viewControllers = [HomeVC,TutorialVC]
//@ 4.
self.present(navigationController, animated: true)
希望这将有助于
我真的希望这个工作,[FirstVC,SecondVC]似乎是一个伟大的方式来初始化!我得到了这个错误,虽然 '推动导航控制器不支持' –
最后,你想要呈现该视图是否正确? – KavyaKavita
是的,也许我误解了导航控制器的工作原理。我想换成HomeVC的导航控制器,并且已经提供了TutorialVC –
我认为要做到这一点的最好办法是使用MainViewController和通知,并做这样的事情:
MainViewController:
//init VCs
override func viewDidLoad() {
super.viewDidLoad()
self.initTutorialViewController()
self.initSignupViewController()
self.initHomeViewController()
//check if for sign up
if isForSignUp {
self.addChildViewController(self.signupViewController!)
self.view.addSubview((self.signupViewController?.view)!)
} else {
self.addChildViewController(self.homeViewController!)
self.view.addSubview((self.homeViewController?.view)!)
}
//other codes here
}
那么你应该在你的MainViewController这些辅助功能,以及:
func transition(fromViewController:UIViewController, toViewController:UIViewController) {
fromViewController.willMove(toParentViewController: nil)
self.addChildViewController(toViewController)
self.transition(from: fromViewController, to: toViewController, duration: 0.25, options: UIViewAnimationOptions.transitionCrossDissolve, animations: {() -> (Void) in
}, completion: {(success) -> (Void) in
fromViewController.removeFromParentViewController()
toViewController.didMove(toParentViewController: self)
})
}
//notification for signing up
func didSignup(notification:Notification) {
self.transition(fromViewController: self.signUpViewController!,
toViewController: self.tutorialViewController!)
}
func didFinishTutorial(notification: Notification) {
self.transition(fromViewController: self.tutorialViewController!,
toViewController: self.homeViewController!)
}
//if you don't need tutorial to be transitioned to
//add other handlers here.
就是这样,我不知道这是否是最好的做法,而这也是我如何处理过渡,如果我需要去LoginPage或直接到HomeVC如果有sessionToken仍然有效。希望这可以帮助!
你的意思profileSettupVC或TutorialVC? – 3stud1ant3
@ 3stud1ant3对不起,我的意思是TutorialVC。刚刚编辑 –