【问题标题】:Cannot push viewcontroller from appdelegate无法从 appdelegate 推送视图控制器
【发布时间】:2013-02-22 07:52:51
【问题描述】:
  1. 在我的窗口基础应用程序中,当我单击 tabbarcontroller 的第二项时,我需要从我的 appdelegate 导航到 editorview,它将显示一个带有三个选项的操作表。

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

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

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

  5. 我已经实现了 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 和导航控制器

【问题讨论】:

    标签: ios uiactionsheet pushviewcontroller appdelegate


    【解决方案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 对象

    【讨论】:

      猜你喜欢
      • 2015-05-23
      • 2017-10-23
      • 1970-01-01
      • 1970-01-01
      • 2016-11-13
      • 1970-01-01
      • 2016-10-22
      • 2016-08-10
      相关资源
      最近更新 更多