【问题标题】:How to get the 'current' navigation controller from tab bar controller如何从标签栏控制器获取“当前”导航控制器
【发布时间】:2011-09-20 10:24:48
【问题描述】:

有没有办法检索标签栏控制器当前可见的导航控制器?

例如,我的程序中有 2 个标签栏(每个有一个导航控制器),如下所示

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url 
{   
   //Method is called when user clicks on a hyperlink in one of view controllers
    NSDictionary *dict = [self parseQueryString:[url query]];
    NSString *userID = [dict objectForKey:@"id"];
    NSString *navconTitle = [dict objectForKey:@"navcon"];


    //intention is to push a view controller onto the CURRENT navigation stack
    [navcon pushViewController:someViewController animated:YES];

    }
}

return YES;
}

谁能告诉我如何确定当前的导航控制器,以便将更多视图控制器推送到它上面?

【问题讨论】:

    标签: objective-c ios uinavigationcontroller uitabbarcontroller


    【解决方案1】:

    更新 Starsky 对 iOS 13 的 Swift 答案(“'keyWindow' 在 iOS 13.0 中已弃用”)

    guard let tabBarVC = UIApplication.shared.windows.filter({$0.isKeyWindow}).first?.rootViewController as? UITabBarController else { return }
        if let currentNavController = tabBarVC.selectedViewController as? UINavigationController {
    ...
    }
    

    【讨论】:

      【解决方案2】:

      一个 Swift 版本,以防有人看不懂 Objective-C,它提供了一个额外的解决方案,用于从任何地方找到 tabBar。我在处理通知时使用它来推送到屏幕。

      guard let tabBarVC = UIApplication.shared.keyWindow?.rootViewController as? UITabBarController else { return }
      
      if let currentNavController = tabBarVC.selectedViewController as? UINavigationController {
          currentNavController.pushViewController(someVC, animated: true)
      }
      

      【讨论】:

        【解决方案3】:

        我认为UITabBarController selectedViewController 属性应该是您正在寻找的。​​p>

        所以,从 UITabBarController 方法:-

         [self.selectedViewController pushViewController:someViewController animated:YES];
        

        【讨论】:

          【解决方案4】:

          使用UITabBarControllers selectedViewController 属性。

          navcon = (UINavigationController*)myTabBarController.selectedViewController;
          [navcon pushViewController:someViewController animated:YES];
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2017-05-14
            • 1970-01-01
            • 1970-01-01
            • 2012-12-02
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多