【问题标题】:How to push viewcontroller from appdelegate in storyboard如何从情节提要中的 appdelegate 推送视图控制器
【发布时间】:2014-05-04 11:19:33
【问题描述】:

我在我的项目中使用SWRevealViewController,我想在应用收到通知时打开一个特定的控制器。我尝试了很多解决方案,但没有任何效果。

如何从我的 AppDelegate 中显示特定的 ViewController?

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

    UIApplicationState appState = UIApplicationStateActive;
    if ([application respondsToSelector:@selector(applicationState)]) {
        appState = application.applicationState;
    }
    application.applicationIconBadgeNumber = 0;
    if (appState != UIApplicationStateActive) {

        SWRevealViewController *navigationController = (SWRevealViewController *)self.window.rootViewController;
        UINavigationController *nav = (UINavigationController *)navigationController;
        UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"Main" bundle: nil];
        PushNotificationsVC *controller = (PushNotificationsVC*)[mainStoryboard instantiateViewControllerWithIdentifier: @"PushNotificationsVC"];
        [nav pushViewController:controller animated:YES];

    } else {

        UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Notification"
                                                            message:[NSString stringWithFormat:@"%@",[[userInfo objectForKey:@"aps"] valueForKey:@"alert"]]
                                                           delegate:nil
                                                  cancelButtonTitle:@"OK"
                                                  otherButtonTitles:nil];
        [alertView show];
    }
}

【问题讨论】:

  • 您应该阅读FAQ 来提出好的问题。
  • 我的项目中有一个幻灯片菜单,因为我使用了 SWRevealViewController 组件。当我收到推送通知时,我想打开一个特定的屏幕(ViewController)。我无法从 appdelegate 中打开特定的控制器。(applicationDidReceiveNotification)。你明白我想说的吗??
  • 如果您有任何想法,请回复
  • 你试过这个吗:[self.window.rootViewController presentViewController:MyCustomViewController animated:NO completion:nil]?你能告诉我们你在-(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo;有什么吗?

标签: ios iphone swrevealviewcontroller


【解决方案1】:

那些寻求快速答案的人:

    var storyboard = UIStoryboard(name: "Main", bundle: nil)

    var destinationController = storyboard.instantiateViewControllerWithIdentifier("DestinationController") as? DestinationController

    var frontNavigationController = UINavigationController(rootViewController: destinationController!)

    var rearViewController = storyboard.instantiateViewControllerWithIdentifier("MenuController") as? MenuController

    var mainRevealController = SWRevealViewController()

    mainRevealController.rearViewController = rearViewController
    mainRevealController.frontViewController = frontNavigationController
    self.window!.rootViewController = mainRevealController
    self.window?.makeKeyAndVisible()

【讨论】:

    【解决方案2】:

    对于那些使用故事板关注http://www.appcoda.com/ios-programming-sidebar-navigation-menu/的人。

    UIStoryboard *st = [UIStoryboard storyboardWithName:@"Main" bundle: nil];
    DestinationController *descController = (DestinationController*)[st instantiateViewControllerWithIdentifier: @"storyboardID_DestController"];
    UINavigationController *frontNavigationController = [[UINavigationController alloc] initWithRootViewController:descController];
    SidebarViewController *rearViewController = (SidebarViewController*)[st instantiateViewControllerWithIdentifier: @"storyboardID_SidebarMenu"];
    
    RevealViewController *mainRevealController = [[SWRevealViewController alloc]  init];
    
    mainRevealController.rearViewController = rearViewController;
    mainRevealController.frontViewController= frontNavigationController;
    
    self.window.rootViewController = mainRevealController;
    

    希望它可以帮助其他人......

    【讨论】:

    • 这对我有用,但隐藏了我的后退按钮,因为我正在导航到子菜单视图控制器
    【解决方案3】:

    正如user34336439提到的一些单词缺陷,正确答案是

        FrontViewController *frontViewController = [[LiveScoreViewController alloc] init];
        RearViewController *rearViewController = [[RearViewController alloc] init];
    
        UINavigationController *frontNavigationController = [[UINavigationController alloc] initWithRootViewController:frontViewController];
        UINavigationController *rearNavigationController = [[UINavigationController alloc] initWithRootViewController:rearViewController];
        SWRevealViewController *mainRevealController = [[SWRevealViewController alloc] initWithRearViewController:rearNavigationController frontViewController:frontNavigationController];
    
        self.window.rootViewController = mainRevealController;
    

    【讨论】:

      【解决方案4】:
      SWRevealViewController *navigationController = (SWRevealViewController *)self.window.rootViewController;
      UINavigationController *nav = (UINavigationController *)navigationController;
      

      修改------

      UINavigationController *nav = (UINavigationController *)navigationController.frontViewController;
      
      
      
      UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"Main" bundle: nil];
      PushNotificationsVC *controller = (PushNotificationsVC*)[mainStoryboard instantiateViewControllerWithIdentifier: @"PushNotificationsVC"];
      [nav pushViewController:controller animated:YES];
      

      【讨论】:

      • NavigationViewController *frontNavigationController = [NavigationViewController alloc] initWithRootViewController:frontVC]; NavigationViewController *rearNavigationController = [[NavigationViewController alloc] initWithRootViewController:rearVC]; SWRevealViewController *mainRevealController = [[SWRevealViewController alloc] initWithRearViewController:rearNavigationController frontViewController:frontNavigationController];我找到了解决方案感谢大家的付出。抱歉,我无法投票给任何人。
      猜你喜欢
      • 2013-10-21
      • 1970-01-01
      • 2014-02-17
      • 2015-05-23
      • 2013-05-23
      • 2023-04-10
      • 2017-10-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多