我不会说这无论如何都是好的设计。我有点继承现有的东西。无论如何,有一个TabController。在这一个选项卡中,有两个视图根据UISegmentController按需加载。这两个ViewControllers都是另一个具有我需要的方法的ViewController的子类。
当我在TabController中时,我想创建一个使用两个ViewControllers的一些超类方法的方法。如何根据需要加载选项卡的当前ViewController?我是否需要引用基本控制器类型,并在按需加载时将其设置为当前视图控制器?感谢。
答案 0 :(得分:0)
要在屏幕上显示活动标签,可以使用[self.tabBarController selectedViewController]
,它将为您提供UIViewController参考。如果你想使用这些方法,你可以将它转换为你的ViewController超类,然后像这样调用方法(其中self.tabBarController
是你的标签栏控制器):
MySuperClassViewController *viewC = (MySuperClassViewController *)[self.tabBarController selectedViewController];
[viewC someMethodDeclaredHere];
答案 1 :(得分:0)
首先,用一些术语来消除一些潜在的混淆:我假设你的意思是控制各种视图控制器的UITabBarController
。此外,您似乎使用UISegmentedControl
不视图控制器,但是UIView
的子类。我希望这些只是错别字而不是概念问题。
当“我在标签控制器中”时,你的意思仍然存在一些歧义。我假设你想把代码放到代表UITabBarController
的类中。但为什么?只需将这些方法放入适当的视图控制器中,或者如果之前必须要将其放入应用程序委托中。但是,如果这些方法位于视图控制器超类中,则它们应该与此视图控制器所需的逻辑有关。
如果您需要其他方法,即在视图控制器之外,请考虑创建单独的#include
文件并将方法放在那里。或者,您可以使用可通过[[UIApplication sharedApplication] delegate]
方便地访问的应用委托。