0

我有一个带有两个标签的标签栏控制器。第一个选项卡显示类型 A 的表格视图。如果单击单元格,则类型 A 的视图被推送到导航堆栈上。如您所料,该视图有一个后退按钮,可从导航堆栈中弹出视图并显示 A 类型事物的表格视图。

第二个选项卡显示类型 B 的表格视图。如果单击单元格,则类型 B 的视图被推送到导航堆栈上。同样,正如您所期望的,该视图还有一个后退按钮,可以从导航堆栈中弹出视图并显示 B 类型事物的表格视图。

A 型视图还有一个按钮,它在概念上将 A 型事物转换为 B 型事物。在视觉上,A 型视图被 B 型视图替换。在幕后,我需要将 A 型视图从导航堆栈中弹出,将选项卡更改为 B 型表事物,然后将 B 型视图控制器弹出到导航堆栈,以便 B 类视图的后退按钮将用户带回 B 类事物表。

我实现这一点的第一个想法是将我的 A 型视图上的按钮链接到我的选项卡栏控制器的实现,它会弹出现有的 A 型视图,将选项卡更改为 B 型事物的列表,然后将 B 型视图推送到导航堆栈。但这会从 A 型视图创建对选项卡栏控制器的否则不必要的引用。

有一个更好的方法吗?也许有一个自定义的segue?

4

2 回答 2

0

如果你觉得这个引用不合适,那么它听起来像是 NSNotification 的工作。无论哪个类最适合执行您的导航逻辑,都可以侦听自定义 @"switchToBThings" 通知,否则将与请求切换的按钮完全分离。

于 2012-11-05T01:28:03.067 回答
0

自从发布我的问题以来,我了解到没有必要维护我自己对标签栏控制器的显式引用,因为每个 UIViewController 都有属性:parentViewController

这意味着我可以从我的类型 A 视图访问我的自定义标签栏控制器,而无需维护我自己的引用。结果,我的代码现在更简单了。当按下类型 A 视图上的按钮时,在类型 A 的视图控制器中执行以下代码:

[(MyCustomTabBarController *)[[self parentViewController] parentViewController] switchToViewOfTypeB:referenceToObjectOfTypeA];

其中 switchToViewOfTypeB 是自定义标签栏控制器上执行 segue 的代码。

在这种情况下,我比使用通知更喜欢这种方法,因为从类型 A 视图中可以清楚地看出,它是负责执行 segue 的自定义选项卡栏。

于 2012-11-11T23:48:55.653 回答