在情节提要中使用同一视图控制器的多个副本

Posted

技术标签:

【中文标题】在情节提要中使用同一视图控制器的多个副本【英文标题】:Using multiple copies of the same view controller in a storyboard 【发布时间】:2013-11-05 17:51:23 【问题描述】:

我的应用中有以下设置: 我的初始视图控制器是一个 UITabBarController。 标签:

1)UINavigationController->PostListVC 2)UINavigationController->CategoriesListVC 3)UINavigationController->PostListVC 4)UINavigationController->PostListVC 5)UINavigationController->MoreViewController

如您所见,3 个选项卡包含相同的 viewController 类,但不应包含相同的视图控制器对象 - 视图将根据他从 AppDelegate 获得的信息显示不同的信息。

我所做的是我创建了 5 个 UINavigationController,将它们连接到 uitabbarcontroller,然后为其中的 3 个创建了一个 rootViewController segue 到同一个 PostListVC 视图——这样我就不需要维护同一个视图的 3 个设计。

我得到的问题是,只有第一个 PostListVC 被正确创建(标签栏中最左边的) - 指向 PostListVC 的其他标签只显示黑屏。

我尝试使用一个 3-tab 示例来说明我连接情节提要的方式: 如您所见,最上面和最下面的视图都连接到 PostListVC。

我不知道问题是什么。我认为我使用情节提要有些错误。

有人知道我该如何解决这个问题吗?

谢谢!

编辑: 我创建了一个简单的示例项目(Xcode 5)来说明这个问题:

http://www.speedyshare.com/Srwfg/TabBarProblem.zip

编辑 2: 该示例的修改版本,显示了所提供解决方案的问题: http://speedy.sh/JkdGC/TabBarProblem-2.zip

无法使用此方法创建不同的 tabBarItems,也无法放置 barItems 以使它们不在一行中 - 即使您尝试更改 segues 的顺序。

【问题讨论】:

此处信息不足,无法提供帮助,但图像中没有任何内容表明存在错误。我建议在每个视图控制器中添加一些NSLogs(可能是viewDidLoad),以确保传递正确的信息并实例化正确的 UIViewController 类。请注意,每个都应该是唯一的。这是调试如此复杂的东西的唯一方法。 viewDidLoad 和 loadView 都只调用一次 - PostListVC 可能没有正确实例化,但我不知道为什么。 需要检查的几件事: IB 内部的类设置是否正确? PostListVC 中的NSLogs 告诉你什么?视图是否在 IB 中连接?除了这些问题,我不确定我能否提供帮助。 我添加了一个示例项目来说明这个问题 这对我来说似乎是一个错误。我建议您在bugreporter.apple.com 与 Apple 记录您的初始问题(示例项目 1),说明如果您使用解决方案(示例项目 2),您不能有不同的项目名称。 【参考方案1】:

正如您所说,您需要三个不同的 PostListVC 实例,那么您应该创建三个不同的 PostListVC 类型的视图控制器,并将每个选项卡连接到自己的选项卡。类是相同的,但每个选项卡都有自己的实例。

【讨论】:

有没有办法让所有3个共享同一个xib?我目前拥有故事板中的所有设计【参考方案2】:

我已经让您的示例程序可以运行,但我不知道该解决方案是否适用于您的整个项目。希望它能让您走上正确的轨道。

解决方案是拥有一 (1) 个导航控制器/嵌入式根视图,但有两 (2) 个与选项卡栏控制器分离。图片如下:

多个UINavigationControllers 链接到同一个UIViewController 似乎存在问题。但是相同的UINavigationController 链接到相同的UIViewController 没有问题,只要它们通过UITabBarController 单独实例化。

【讨论】:

我也得到了这个解决方案,但是:1)使用这种方式,您不能为不同的视图创建不同的 tabBarItems(例如,如果您有不同的按钮图像)。 2) 它将 barItems 捆绑在一起 - 您不能在链接到同一个 viewController 的 2 个之间添加不同的 tabBarItem。 (编辑 2 中添加的此问题的示例)

以上是关于在情节提要中使用同一视图控制器的多个副本的主要内容,如果未能解决你的问题,请参考以下文章

使用相同背景图像的具有多个场景的视图控制器 (UIViewController) 情节提要

在页面视图控制器中以编程方式使用情节提要中的视图控制器

在情节提要中使用 iOS 静态库公共视图控制器?

如何在多个 .xib 文件之间执行展开转场(不使用情节提要)

管理同一视图控制器的多个实例

将新的视图控制器链接到情节提要?