我有一个带有两个标签的标签栏控制器。第一个选项卡显示类型A的事物的表视图。如果单击单元格,则将类型A的视图推送到导航堆栈。正如您所料,此视图有一个后退按钮,可以从导航堆栈弹出视图,并显示A类型的表格视图。
第二个选项卡显示B类事物的表格视图。如果单击一个单元格,则将类型B的视图推送到导航堆栈。同样,正如您所期望的那样,此视图还有一个后退按钮,可以从导航堆栈中弹出视图,并显示B类事物的表格视图。
类型A视图还有一个按钮,从概念上将类型A事物转换为类型B事物。在视觉上,类型A视图被替换为类型B的视图。在幕后,我需要从导航堆栈中弹出类型A视图,将选项卡更改为类型B的表项并将类型B视图控制器弹出到导航堆栈,以便类型B视图的后退按钮将用户带回到B类事物的表格。
我实现这个的第一个想法是将我的类型A视图上的按钮链接到我的标签栏控制器的实现,它弹出现有的类型A视图,将标签更改为类型B的列表然后推送类型B查看导航堆栈。但是这会从类型A视图中创建对标签栏控制器的不必要的引用。
有更好的方法吗?也许有自定义的segue?
答案 0 :(得分:0)
如果参考文献看起来不合适,那么这听起来像是NSNotification的工作。无论哪个类最适合执行导航逻辑,都可以监听自定义的@“switchToBThings”通知,否则将完全与请求切换的按钮分离。
答案 1 :(得分:0)
自从发布我的问题以来,我了解到没有必要维护我自己对标签栏控制器的显式引用,因为每个UIViewController都有属性:parentViewController
。
这意味着我可以从类型A视图访问我的自定义标签栏控制器,而无需维护我自己的参考。结果,我的代码现在变得更简单了。当按下类型A视图上的按钮时,在类型A的视图控制器中执行以下代码:
[(MyCustomTabBarController *)[[self parentViewController] parentViewController] switchToViewOfTypeB:referenceToObjectOfTypeA];
其中switchToViewOfTypeB是执行segue的自定义选项卡栏控制器上的代码。
在这种情况下,我比使用通知更喜欢这种方法,因为从类型A视图可以清楚地看出,它是负责执行segue的自定义标签栏。