iOS:如何解决大故事板中导航控制器场景的问题

时间:2015-09-09 13:25:30

标签: ios uinavigationcontroller uistoryboard

我是iOS编程的新手,一些简单的事情让我很困惑。

我的应用程序包含50个场景,每个场景都使用导航栏和条形按钮来支持应用内导航。其中近30个以模态呈现。

我是否正确,这意味着我应该在我的故事板上添加30多个单独的导航控制器?

如果是这样 - 它将使我的故事板难以阅读和支持。

请告诉我 - 在这种情况下采取行动的最佳方式是什么? 我接下来试过了:

  1. 我试图找到像“不显示导航控制器”这样的设置但没有成功。

  2. 我找到了调整每个导航控制器大小的方法according to this post

  3. 我可以做“技巧”

    3.1添加导航控制器

    3.2删除导航控制器

    3.3之后我仍然嵌入了“导航项”并可以通过编程方式对其进行配置

  4. 可能没有那么“棘手”的方法吗?

2 个答案:

答案 0 :(得分:1)

如果您必须自定义导航栏,则在界面构建器或代码中执行导航栏将难以管理。

如果我是你,如果导航栏上的按钮很简单,我会把它们放在代码中。

例如,在故事板中,您可以在没有导航控制器的情况下制作视图控制器。

在您的代码中,当您呈现视图控制器时,使用故事板segues初始化它们并初始化uinavigationcontroller并将topviewcontroller设置为呈现视图控制器。

通过在视图控制器类中使用presentViewController,您可以模态呈现视图控制器。

在你出席之前不要忘记添加按钮。

这是我的例子

var viewControllerToShowModally = storyboard?.instantiateViewControllerWithIdentifier("VIEWCONTROLLER") as!YOUR_CUSTOM_VIEWCONTROLLER
var navigationController = UINavigationController(rootViewController: viewControllerToShowModally)

navigationController.navigationItem.title = "Title"
// Or add buttons, I mean customize the navigation bar!

presentViewController(navigationController, animated: true, completion: nil)

并在模态显示的视图控制器中调用以下方法来解除

dismissViewControllerAnimated(true, completion: nil)

通过这种方式,在故事板中,您不需要将30个视图控制器与凌乱的segue线连接起来。此外,还有30个导航控制器。

答案 1 :(得分:1)

当您在屏幕上显示某些内容时,您将开始新的流程。每个导航控制器代表一个流程,因此如果您提供30个视图控制器,则应该有30个导航控制器。

例如,如果您有以下流程:(图例:>表示推送, - >表示root vc)

{{Foo}}

你应该:

a > b > c
c presents d
d > e > f

因此,在导航控制器中嵌入您需要的每个视图控制器。然后,当您需要开始新流程时,从故事板中实例化并显示正确的导航控制器。