【问题标题】:iOS: how to resolve issue with Navigation Controller scene in big StoryboardiOS:如何解决大故事板中导航控制器场景的问题
【发布时间】:2015-09-09 13:25:29
【问题描述】:

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

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

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

如果是这样 - 这将使我的 Storyboard 难以阅读和支持。

请告诉我 - 在这种情况下最好的处理方式是什么? 我已经尝试了下一个:

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

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

  3. 我可以做“把戏”

    3.1 添加导航控制器

    3.2 移除导航控制器

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

可能有不那么“棘手”的方法吗?

【问题讨论】:

    标签: ios uinavigationcontroller uistoryboard


    【解决方案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 个视图控制器与凌乱的转场线连接起来。也不会有 30 个导航控制器。

    【讨论】:

    • 感谢杰森的回答!是的,它就是这样,我可以做到,但 Storyboard 真的很强大,我想找到使用它的最佳方式。如果可能的话:)
    【解决方案2】:

    当你在屏幕上展示一些东西时,你就开始了一个新的流程。每个导航控制器都代表一个流程,因此如果您呈现 30 个视图控制器,那么您应该有 30 个导航控制器。

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

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

    你应该有:

    navigationController1 -> a > b > c
    c presents navigationController2
    navigationController2 -> d > e > f
    

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

    【讨论】:

    • 是的。但问题是——好的,我已经做到了。如何升级故事板使其更具可读性?
    • 您可以(应该)为每个流程创建一个单独的故事板。这将使它易于管理/可读。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-12-29
    • 2012-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-10
    • 2013-02-03
    相关资源
    最近更新 更多