【问题标题】:Open specific ViewController when recive push notification?收到推送通知时打开特定的视图控制器?
【发布时间】:2015-07-24 09:56:25
【问题描述】:

我会通过打开 parse.Using IOS 8 发送的推送通知来设置打开我们特定视图。 我怎样才能做到这一点?? 我使用了这段代码:

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {
UINavigationController *navController = (UINavigationController *)self.window.rootViewController;
NotificationViewController *notificationViewController = [[NotificationViewController alloc] init];
[navController.visibleViewController.navigationController pushViewController:notificationViewController animated:YES];    

}

【问题讨论】:

    标签: uiviewcontroller ios8 push-notification xcode6 navigationcontroller


    【解决方案1】:

    我用这个代码

    - (UIViewController*)topViewController {
        return [self topViewControllerWithRootViewController:[UIApplication sharedApplication].keyWindow.rootViewController];
    }
    
    
    - (UIViewController*)topViewControllerWithRootViewController:(UIViewController*)rootViewController {
    
        if ([rootViewController isKindOfClass:[UITabBarController class]]) {
            UITabBarController* tabBarController = (UITabBarController*)rootViewController;
            return [self topViewControllerWithRootViewController:tabBarController.selectedViewController];
        } else if ([rootViewController isKindOfClass:[UINavigationController class]]) {
            UINavigationController* navigationController = (UINavigationController*)rootViewController;
            return [self topViewControllerWithRootViewController:navigationController.visibleViewController];
        } else if (rootViewController.presentedViewController) {
            UIViewController* presentedViewController = rootViewController.presentedViewController;
            return [self topViewControllerWithRootViewController:presentedViewController];
        } else {
            return rootViewController;
        }
    }
    

    这样称呼:

    - (void) doSomething {
        UIViewController *topViewController = [self topViewController];
        NotificationViewController *notificationViewController = [[NotificationViewController alloc] init];
        [topViewController.navigationController pushViewController:notificationViewController animated:YES];
    }
    

    不要忘记在你的应用程序中添加此代码:didFinishLaunchingWithOptions:(当用户在应用程序关闭的情况下触摸通知时)

        NSDictionary *remoteNotification = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];
    if (!remoteNotification) {
        UILocalNotification *notification = [launchOptions objectForKey:UIApplicationLaunchOptionsLocalNotificationKey];
        if (notification) {
            [self doSomething];
        }
    } else {
        [self doSomething];
    }
    

    【讨论】:

    • 我这样做了,但它仍然不起作用;我编辑了这段代码: - (void) doSomething { UIViewController *topViewController = [self topViewController]; Mappa *notificationViewController = [[Mappa alloc] init]; [topViewController.navigationController pushViewController:notificationViewController 动画:YES]; }
    • 究竟是什么不工作?你在 application:didReceiveRemoteNotification: 中调用了 doSomething: 对吗?
    • 我在 didReciveRemoteNotification 中调用了 doSomething 但它不起作用。当我从推送通知打开应用程序时,它会继续在 mainView 中打开。在 doSomething 中将 myViewController 替换为 notificationViewController 是否正确?
    • 如果您的应用已关闭,您需要使用我回复中的最后一个代码。
    猜你喜欢
    • 2017-08-13
    • 2014-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-23
    • 2011-10-07
    相关资源
    最近更新 更多