【问题标题】:How to segue between two views involving a tab bar, table view and navigation controller?如何在涉及标签栏、表格视图和导航控制器的两个视图之间切换?
【发布时间】:2012-10-24 20:23:50
【问题描述】:

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

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

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

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

有没有更好的方法来做到这一点?也许使用自定义转场?

【问题讨论】:

    标签: ios


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-06
        • 2015-11-30
        • 2019-11-05
        相关资源
        最近更新 更多