自定义对导航控制器层次结构中特定子视图的选择

时间:2018-09-19 23:07:56

标签: ios objective-c uikit

我在情节提要中有一个“注册”向导流程,它是一个导航控制器(作为情节提要的入口点),在导航栏中具有普通的“上一步” /“下一个”按钮,然后具有4个子步骤场景,它们具有线性的“显示/推送”选择过渡链。

通常我会自定义到情节提要的导航控制器的位置,然后向导会从第一步开始,一切都很好。

但是从应用程序的另一点来看,我需要模态转到子步骤之一(而不是第一步),并且我不想将整个视图和控制它的类复制/粘贴到一个全新的视图中。导航控制器链,所以我想我可以直接选择它(并动态调整“后退/下一步”按钮中发生的情况)。

所以我尝试子类化UIStoryboardSegue来为此做一个自定义segue,它的sceneNamed方法做这样的事情:

返回[故事板InstantiateViewControllerWithIdentifier:sceneName];

它可以工作,但是由于我们实例化了子场景的“视图控制器”而不是“导航控制器”,所以我看到了场景但是没有导航栏。

另一方面,如果我选择导航控制器,它将照常从第一个链接的场景开始。

有什么方法可以欺骗UIKit进入导航控制器,但可以使其从正常层次结构/流程的下一个场景开始?

是的,我意识到这是骇人听闻的;还有其他解决方案(例如,在这种情况下,我可以以编程方式添加“后退/下一步”按钮)。只是好奇。

1 个答案:

答案 0 :(得分:1)

那么为什么不挂起这样的话题:

Navigation Controller (sign up) ->
  VC1 -> VC2 -> Terms of Service -> VC3
                       ↑
Login View ->          |                          
     Navigation Controller

这样,您只需两种不同的方法即可到达“服务条款”视图控制器,而无需复制它。您可以使用情节提要参考对象进行配置,而无需使情节提要中出现一堆纵横交错的箭头。