【问题标题】: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),您不能有不同的项目名称。

标签: ios storyboard viewcontroller


【解决方案1】:

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

【讨论】:

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

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

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

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

【讨论】:

  • 我也得到了这个解决方案,但是:1)使用这种方式,您不能为不同的视图创建不同的 tabBarItems(例如,如果您有不同的按钮图像)。 2) 它将 barItems 捆绑在一起 - 您不能在链接到同一个 viewController 的 2 个之间添加不同的 tabBarItem。 (编辑 2 中添加的此问题的示例)
猜你喜欢
  • 2014-12-26
  • 2023-04-10
  • 2012-11-05
  • 2013-10-21
  • 1970-01-01
  • 2011-12-23
  • 1970-01-01
  • 2012-07-10
  • 2015-07-05
相关资源
最近更新 更多