2017-09-01 81 views
1

我试图模仿苹果默认应用程序“照片”中的导航逻辑。以下是应用程序导航逻辑的图示。如何从非初始的NavigationController场景开始

enter image description here

当你第一次启动应用程序,你的土地上“的时刻”的观点是在应用中的第三高的层级。这很有趣,因为整个“照片”选项卡似乎都嵌入到单个NavigationController中。

但是,如果所有场景都嵌入到单个NavigationController中,您将如何从非初始场景开始?

这里是我不嵌入场景到任何NavigationController(所有塞格斯表示为show hackish的实现: enter image description here

它导致我想要的行为,但我不知道的内存问题我是不是分配新的。风险投资的每一个循环?和故事板只是看起来不正确的。

作为一个答案,一个简单的故事板捕获与简短的解释将是很好。

+1

=你'[firstViewController,SecondViewController,DesiredInitialViewController]' –

+1

你可以这样做编程,可这你的解决方案? –

+0

我的应用程序是由故事板制作的,我希望在方法和风格上保持一致。这是不可能在故事板中做到的吗? – YOUNG

回答

2

正如我在我的评论说,你需要修改的属性您UINavigationController你可以做到这一点使用setViewControllers(_:animated:)方法或直接修改.viewControllers财产,其中rootViewController将是viewControllersArray[0]topViewController将是viewControllersArray[count-1]

此属性描述和细节可以成立UINavigationController文档中

viewControllers 

属性

当前的视图控制器导航堆栈。

宣言 SWIFT

var viewControllers: [UIViewController] 

讨论根视图控制器是在索引0处的阵列中,所述后视图控制器是在索引n-2,和最高控制器在 索引n-1,其中n是数组中的项目数。

将一个新的视图控制器阵列分配给该属性的效果是 等效于将 动画参数设置为false时调用setViewControllers:animated:方法。

例如使用`UINavigationController`可以设置`.viewControllers`阵列

let storyboard = UIStoryboard(name: "Main", bundle: Bundle.main) 
    let firstViewController = storyboard.instantiateViewController(withIdentifier: "FirstViewController") as? FirstViewController 
    let secondViewController = storyboard.instantiateViewController(withIdentifier: "SecondViewController") as? SecondViewController 
    let thirdViewController = storyboard.instantiateViewController(withIdentifier: "ThirdViewController") as? ThirdViewController 

    self.navigationController?.setViewControllers([firstViewController,secondViewController,thirdViewController], animated: false)