无法从 appdelegate 推送视图控制器

Posted

技术标签:

【中文标题】无法从 appdelegate 推送视图控制器【英文标题】:Cannot push viewcontroller from appdelegate 【发布时间】:2013-02-22 07:52:51 【问题描述】:

    在我的窗口基础应用程序中,当我单击 tabbarcontroller 的第二项时,我需要从我的 appdelegate 导航到 editorview,它将显示一个带有三个选项的操作表。

    actionsheet 工作正常,如果您从标签栏中选择第二项,它将显示一个 actionsheet。

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

    我在 appdelegate 中声明我的操作表。

    我已经实现了 actionsheetdelegate

    (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex

该方法被触发,它可以显示我是否执行 nslog。但它不能推送到我想要的视图控制器.. 这是我的代码:

- (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 和导航控制器

【问题讨论】:

【参考方案1】:

关于这个问题的答案充满了不好的答案。

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

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];

如果您还有问题,请不要犹豫

【讨论】:

工作,但导航丢失【参考方案2】:

这样做

你为UITabBarController 分配了什么VC?我打赌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"];

希望有帮助

【讨论】:

但是我已经在 storyboard 中嵌入了我的 tabbarcontroller 和导航,所以我没有再次声明我的 tabbarcontroller 我认为你是对的,也许我的故事板设计错了,我已经放了 segue 标识符和视图控制器标识符,但它仍然不起作用,请你检查我的故事板,我想推到红色圆圈中的视图控制器这是图片:i46.tinypic.com/5jz704.png 图片太小了,能看大点吗?【参考方案3】:

而不是这个 self.window.rootViewController.navigationController

使用 UINavigationController 对象

【讨论】:

以上是关于无法从 appdelegate 推送视图控制器的主要内容,如果未能解决你的问题,请参考以下文章

如何将数据从 appdelegate 传递到视图控制器?

从推送视图访问第一个导航控制器中的方法和变量

从 appDelegate 转到视图控制器

如何从 AppDelegate.swift 路由到任何视图控制器

在 AppDelegate 中使用推送通知重定向视图

每次将视图控制器压入堆栈时,如何从 appDelegate 重新加载视图控制器?