无法从appdelegate推送viewcontroller

时间:2013-02-22 07:52:52

标签: ios uiactionsheet pushviewcontroller appdelegate

  1. 在我的窗口基础应用程序中,我需要从appdelegate导航到editorview,当我点击tabbarcontroller的第二项时,它将显示一个包含三个选项的动作表。

  2. 动作表工作正常,如果您从标签栏中选择第二项,它会显示一个动作表。

  3. 但是当我选择操作表的第一个选项时,我需要推送到另一个视图

  4. 我在appdelegate中声明了我的动作表。

  5. 我已经实现了actionsheetdelegate

    • (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex
  6. 该方法是trigerred,它可以显示我是否执行nslog。但它不能推到我想要的viewcontroller .. 这是我的代码:

    - (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex
        {
            if (buttonIndex == 0)
            {
                DetailViewController *v2 = [[DetailViewController alloc] init];
    
                NSLog(@"PUSH TRIGER");
    
                [self.window.rootViewController.navigationController pushViewController:v2 animated:YES];
            }
        }
    

    注意:我已经在我的故事板中嵌入了tabbarcontroller和导航控制器

3 个答案:

答案 0 :(得分:9)

与此问题相关的答案很糟糕。

我希望我的符合你的要求。

1.-内部

- (void)application:(UIApplication*)application didReceiveRemoteNotification:(NSDictionary*)userInfo

// 1.-首先:实例化navigationController。通常是rootviewcontroller

 UINavigationController *navigationController = (UINavigationController *)self.window.rootViewController;

// 2.-第二:实例化故事板 //它可能被标记为MainStoryBoard。如果你改了它就要小心

UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle: nil];

// 3.-第三次实例化您想要导航的VC //在我的特定情况下,它被称为IniciarSliderViewController。不要忘记在appdelegate中导入它。还要注意正确标记。在我的案例中,MenuSlider

IniciarSliderViewController *controller = (IniciarSliderViewController*)[mainStoryboard instantiateViewControllerWithIdentifier: @"MenuSlider"];

// 4.-最后一个,你现在可以像往常一样在VC中推送

[navigationController pushViewController:controller animated:YES];

不要犹豫,问你是否还有问题

答案 1 :(得分:2)

这样做

您为UITabBarController分配了什么?我打赌UIViewController?请尝试分配UINavigationController而不是UIViewController

合成UINavigationController *navController;

self.navController = [[UINavigationController alloc] init];
SomeViewController *viewController = [[SomeViewController alloc]  initWithNibName:@"SomeViewController" bundle:nil];
self.navController.viewControllers = [NSArray arrayWithObject:viewController];

UITabBarController *tabBarController = [[UITabBarController alloc] init];
[tabBarController setViewControllers:[NSArray arrayWithObjects:
self.navController, nil]];

然后在您的操作表

[self.navController pushViewController:v2 animated:YES];

编辑故事板

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
   self.navController = (UINavigationController*) [storyboard instantiateViewControllerWithIdentifier:@"MyNavController"];

希望有所帮助

答案 2 :(得分:-2)

而不是self.window.rootViewController.navigationController

使用UINavigationController对象