如何从NSObject类获取导航控制器并在ios中推送视图控制器

时间:2016-04-09 07:33:10

标签: ios objective-c uinavigationcontroller

我在静态库项目中工作,我想在iOS项目的导航控制器中推送视图控制器我该怎么办?我这样做:

  UIStoryboard * storyboard = [[[UIApplication sharedApplication] keyWindow] rootViewController].storyboard;
UIViewController* pushtoVC = [storyboard instantiateViewControllerWithIdentifier:@"home"];
UINavigationController *navController = [[[[UIApplication sharedApplication] keyWindow]rootViewController] navigationController];
[navController pushViewController:pushtoVC animated:YES];

我还尝试了以下代码,但它没有推送视图控制器。

  UIStoryboard * storyboard = [[[UIApplication sharedApplication] keyWindow] rootViewController].storyboard;
UIViewController* pushtoVC = [storyboard instantiateViewControllerWithIdentifier:@"home"];
UINavigationController *navController = [[[[UIApplication sharedApplication] keyWindow]rootViewController] navigationController];
[navController pushViewController:pushtoVC animated:YES];

但是如果我在模态上使用当前视图控制器它正在工作但导航控制器仅隐藏View控制器已加载。 在没有导航控制器的情况下以模态方式呈现的代码如下。

 UIStoryboard * storyboard = [[[UIApplication sharedApplication] keyWindow] rootViewController].storyboard;
            if ([[storyboard valueForKey:@"identifierToNibNameMap"] objectForKey:@"home"]) {
                // the view controller exists, instantiate it here
                UIViewController* myVC = [storyboard instantiateViewControllerWithIdentifier:@"home"];
                myVC.modalPresentationStyle = UIModalPresentationFullScreen;
                [[[[UIApplication sharedApplication]keyWindow] rootViewController] presentViewController:myVC animated:YES completion:nil];

以上代码以模态方式呈现视图控制器,但导航控制器已从视图控制器中删除,但我想导航到带导航控制器的主视图控制器。

3 个答案:

答案 0 :(得分:6)

它并不完全清楚你正在尝试做什么,所以可以说你应该通过一个控制器用于演示或将控制器传递给其他知道如何呈现它的人。

无论如何,我猜你的根VC是一个导航控制器,所以你应该直接使用它而不是要求它的导航控制器(这是零)。

UINavigationController *navController = (UINavigationController *)[[[UIApplication sharedApplication] keyWindow] rootViewController];
[navController pushViewController:pushtoVC animated:YES];

答案 1 :(得分:1)

Swift 4中的答案

{{1}}

答案 2 :(得分:1)

由于这是一种幼稚的方法,因此对上述答案进行了改进。下面的代码将确保视图控制器上的所有功能都存在。

let storyBoard : UIStoryboard = UIStoryboard(name:"Main", bundle: nil)
        if  let conVC = storyBoard.instantiateViewController(withIdentifier: "StoryboardID") as? ViewController,
            let navController = UIApplication.shared.keyWindow?.rootViewController as? UINavigationController{
            navController.pushViewController(conVC, animated: true)