【问题标题】:How can I get ViewController from TabBarController on AppDelegate?如何从 AppDelegate 上的 TabBarController 获取 ViewController?
【发布时间】:2012-05-21 16:19:57
【问题描述】:

我用的是iOS5的storyboard,我的初始视图控制器是TabBarController,view1&view2&view3&view4有四种关系,那么如何获取view3的视图控制器呢?

我试过了:

[[[[self.window.rootViewController navigationController] tabBarController] viewControllers] objectAtIndex:2];

但它不起作用......

【问题讨论】:

    标签: iphone ios ipad ios5


    【解决方案1】:

    您说您的初始(根)视图控制器是 UITabBarController,但您指的是带有导航控制器和标签栏控制器的视图控制器。您是否在视图控制器层次结构中混淆了?

    编辑:

    如果您的根视图控制器实际上只是一个选项卡栏控制器,并且您想获得第三个选项卡,则代码如下:

    [[((UITabBarController *)self.window.rootViewController) viewControllers] objectAtIndex:2];
    

    【讨论】:

    • “UIViewController”没有可见的@interface 声明选择器“viewControllers”
    • 是的,它有效。我太傻了。 UITabBarController *tabBarController = (UITabBarController *)self.window.rootViewController;
    【解决方案2】:
    [self.tabBarController setSelectedIndex:2];
    

    【讨论】:

    • 虽然是最简单的答案,但这是获取 tabBarController 的最简单和最好的方法。 UITabBarController 向 UIViewController 添加一个类别,如果视图在一个中,则返回 UITabBarController,否则返回 NULL。
    • 有没有办法在选定的索引处获取对象(视图控制器)?
    【解决方案3】:

    试试这个方法

    在任何视图控制器中

     YourViewController *yourViewController= (YourViewController*)  [self.tabBarController.viewControllers objectAtIndex:3];
    

    这将返回您的视图控制器对象。将其转换为您的视图控制器,您就可以使用它了。 奔跑吧

    【讨论】:

    • 这个答案的 Swift 3 版本是什么?
    【解决方案4】:

    斯威夫特 4.0

    let viewC = self?.tabBarController.viewControllers.first // will give single Navigation Controller on index 0
    let viewC = self?.tabBarController?.viewControllers// will give array of Navigation Controller
    

    你可以进一步检查 Visible ViewController

    if let nav = viewC as? UINavigationController {
       if nav.visibleViewController is YourViewControllerName{
            // Do Code
         }
    }
    

    【讨论】:

      【解决方案5】:
         UIViewController *loginViewController=self.window.rootViewController;
      
         UITabBarController *controller=loginViewController.tabBarControllerObj;
      
         UIViewController *selectedController=controller.selectedViewController;
      

      从中您将获得选定的视图控制器。

      要获取所有视图控制器,只需替换

      NSArray *viewControllers = [controller viewControllers];
      

      【讨论】:

        猜你喜欢
        • 2013-08-26
        • 2020-06-29
        • 1970-01-01
        • 2014-01-29
        • 1970-01-01
        • 2014-08-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多