【问题标题】:Tab bar in storyboard with reused ViewControllers IOS5情节提要中的标签栏,带有重用的 ViewController IOS5
【发布时间】:2012-12-17 03:23:27
【问题描述】:

我的程序由带有 5 个标签的标签栏组成。选项卡 1、2 和 3 的用户界面是相同的,唯一的区别在于内容表示的逻辑,例如new, top ...我在情节提要中有一系列 ViewControllers,我的问题是如何重用我的 ViewControllers?

【问题讨论】:

    标签: ios5 tabs storyboard


    【解决方案1】:

    您想重用您的视图控制器代码文件 .m 和 .h 还是希望重用具有 UI 的情节提要对象?

    重用您的代码很容易实现。每个故事板对象都可以与一个自定义类相关联。它在身份右侧的对象检查器上。您可以将相同的视图控制器类分配给一个或多个故事板对象 - 允许您重用您的代码。

    如果您想重用您在情节提要中创建的视图布局并重用相同的情节提要但具有不同的视图控制器类 - 以管理不同的功能 - 目前是不可能的。

    一个潜在的解决方法是通过添加一个 xib 文件并将您的用户界面放入其中来定义一个自定义 UIView。然后创建一个自定义 UIView 子类并分配它。然后在您的故事板中,您可以初始化自定义视图并将其添加为子视图。您将引用自定义类来管理 UI。

    除非您的 UI 非常复杂,否则通常更容易在单独的故事板上重新创建 UI 并为它们分配适当的视图控制器。您可以使用 cmd-d 复制情节提要,或者简单地复制和粘贴。您应该在将 UI 对象连接到任何代码之前执行此操作,因为有时复制和粘贴会继承旧的引用。

    因此,设置您的标签栏控制器,将单独的导航控制器连接到每个标签,然后将视图控制器(视图或表格视图或页面控制器等)作为根视图连接到每个导航控制器。然后设置您的 UI,然后分配您的自定义子类,然后将 UI 连接到子类中的属性。请记住,您可以跨故事板中的多个视图控制器重用您的子类,因为每个故事板都会创建该子类的新实例。您可能只需要一些额外的逻辑来正确管理每个选项卡功能上的内容。

    没有代码,只有我的 .02 新年快乐。

    【讨论】:

    • 非常感谢,新年快乐!我已经按照您的描述完成了大部分工作 - 由于几个选项卡中的 UI 相似,我刚刚复制粘贴的视图控制器并连接到选项卡导航控制器(所有操作都在情节提要中执行)。
    • 问题是我有单例类来保存全局变量,所以我想我需要为每个选项卡设置几个单例类,第二个问题是我不知道如何确定哪个选项卡导航控制器调用了视图控制器以执行特定的数据排序,请提供建议... 1.有几个单例是否正确?, 2.如何确定哪个导航控制器正在管理我的视图控制器?
    • 嗨@David - 你会发现很多关于使用单例的争论。我个人对它们的使用没有任何问题,但我的最佳实践建议是:如果您需要存储一两个属性,请使用应用程序委托,它实际上是一个方便的单例。如果您有许多属性和方法,那么将其隔离到一个小目的,并限制您的单例仅用于该目的。避免用不同的功能填充你的单例,因为它往往会导致意大利面条代码。如果您需要在标签栏视图控制器之间共享模型,单例是一种不错的方法。
    • 谢谢 CocoaEv,我的问题的第二部分。答案是:NSUInteger index = [self.tabBarController.viewControllers indexOfObjectIdenticalTo:self.navigationController];
    • @David - 感谢那个小小的 sn-p 我不知道这种方法,但我只是尝试了一下,效果很好。好工作!我还将向您提及,以调查使用 UITabBarControllerDelegate 或 UITabBarDelegate 使您的视图控制器成为 tabBar 的委托是否会改进您的设计。有一种方便的方法可以在选择视图控制器时通知您。
    猜你喜欢
    • 1970-01-01
    • 2011-12-26
    • 2012-02-16
    • 1970-01-01
    • 1970-01-01
    • 2015-09-13
    • 2014-05-05
    • 1970-01-01
    • 2016-02-20
    相关资源
    最近更新 更多