确定 UITabBar 项属于哪个 UIViewController 子类

Posted

技术标签:

【中文标题】确定 UITabBar 项属于哪个 UIViewController 子类【英文标题】:Determining which UIViewController subclass that a UITabBar Item belongs to 【发布时间】:2010-09-16 12:03:01 【问题描述】:

我在 appDelegate 中实例化了一个 UITabBarController,但我需要一种方法来了解用户何时按下不同的标签栏项目(标签栏上的按钮)。

-UITabBarDelegate 协议进行救援(使用所需的 didSelectViewController 方法)!

在 Interface Builder 中连接好所有东西后,我如何获得对对应于被按下的这个标签栏项目的实际 UIViewController 子类实例的引用?

我需要这个参考,因为每次按下标签栏项目时,我都需要在我的 UIViewControllers 子类之一中调用一个方法。

有什么建议吗?

- (void)tabBarController:(UITabBarController *)theTabBarController didSelectViewController:(UIViewController *)viewController
   
    NSLog(@"%@", [[self.tabBarController selectedViewController] nibName]); // nil, no success here     

    if ([theTabBarController selectedIndex] == 1)          
        MySecondViewController *reference = (MySecondViewController *) viewController;      

    if ([reference isKindOfClass:[UINavigationController class]]) 
        NSLog(@"OMG. It's a UINavigationController class??!"); // kicks in for some reason, shouldn't reference be a MySecondViewController
       

【问题讨论】:

看来您在激活的选项卡中使用UINavigationController。如果是这样,您需要从UINavigationController 获取顶视图控制器,并且您应该获取您的MySecondViewController 实例。 【参考方案1】:

可能我没有正确理解您的问题,但您所要求的似乎只是传递给您提到的方法调用的“viewController”参数

- (void)tabBarController:(UITabBarController *)theTabBarController didSelectViewController:(UIViewController *)viewController

UITabBarController 也有获取相同信息的属性

@property(nonatomic, assign) UIViewController *selectedViewController

【讨论】:

以上是关于确定 UITabBar 项属于哪个 UIViewController 子类的主要内容,如果未能解决你的问题,请参考以下文章

告诉 UITabBar 要加载哪个视图

docker - 如何确定哪个挂载属于哪个映像?

如何确定哪个 w3wp.exe 进程属于哪个网站?

UITabBar 获取选中项

如何显示不属于我的 UINavigationController 根目录的 UITabBar?

UITabBar项过多时如何自定义出现的UINavigationBar?