24

我創建一個應用程序是誰的故事板流像下面的圖片:啓動特定的viewController響應遠程推送通知

storyboard

當從「Sysalert視圖控制器」他們是在用戶登錄帶入「消息列表視圖控制器」,我做一個NSURLConnection加載一些JSON到表中。當用戶點擊表中的一行時,它們被帶入「消息詳細信息」中,該消息顯示了該消息的更詳細信息。

當用戶從一個推送通知下水前啓動應用程序,無論應用程序的狀態,我想該應用從我的服務器加載「郵件列表」的數據,然後告訴他們這只是得到了消息推送到設備。

我知道我需要使用didFinishLaunchingWithOptions來告訴應用程序對推送通知做出反應,但是如何設置視圖層次結構以便「消息列表」視圖控制器加載其數據,然後按下「消息詳細信息」視圖控制器放入堆棧以獲取適當的消息?

基本上這種模仿郵件或郵件應用程序的行爲。使用通知進行打開會將您帶到視圖控制器中,但您仍然可以像層次結構一樣從初始viewController啓動應用程序並依次遍歷viewControllers。

+0

的一個使用@conorgrifinhave你有答案嗎?我有同樣的問題..感謝 – 2014-03-24 08:04:03

+0

可能重複的[iOS的Swift從推送通知以編程方式導航到某些ViewController](https://stackoverflow.com/questions/43058261/ios-swift-navigate-to-certain-viewcontroller-programmatically -from-push-notifica) – 2017-12-18 13:24:34

回答

8

可以做你所描述的,但我不會推薦它。

弗里斯特將與您在故事板所需的視圖斷開的視圖控制器,給視圖控制器的標識,像「我的推送通知查看」

didFinishLaunchingWithOptions:,你可以從RootViewController的應用程序代表。該控制器將成爲導航控制器。使用導航控制器,您可以在堆棧頂部推送新的視圖控制器。要創建新的視圖控制器,請使用標識符「我的推送通知視圖」實例化視圖控制器。

UINavigationController *navController = (UINavigationController *)self.window.rootViewController; 
UIViewController *notificationController = [navController.storyboard instantiateViewControllerWithIdentifier:@"My Push Notification View"]; 

[navController pushViewController:notificationController animated:YES]; 

我想你會想使用類似-presentViewController:animated:completion:顯示一個模式的看法,而不是中斷導航堆棧。

UIViewController *rootController = (UIViewController *)self.window.rootViewController; 
UIViewController *notificationController = [rootController.storyboard instantiateViewControllerWithIdentifier:@"My Push Notification View"]; 

[rootController presentViewController:notificationController animated:YES completion:NULL]; 
+0

我在didFinishLauncingWithOption中的ios 7中實現了它,每次應用程序打開時它都被觸發並打開。如果推送通知進入和/或如果應用程序已關閉,並且推送通知進入 – 2014-06-09 04:36:57

4

試試這個,我在我的應用程序,用戶在應用程序委託作爲全球

ex: BOOL gotNotifcation; 

-(void)application:(UIApplication*)app didReceiveRemoteNotification:(NSDictionary *)userInfo 
{ 
    NotificationsViewController *notificationobject = [[NotificationsViewController alloc]init]; 
    [self.navigationController pushViewController:notificationobject animated:YES]; 
    gotNotifcation = YES; 
} 

在NotificationsViewController的後退按鈕動作的變量,如果它是定製的按鈕

-(void)gotoback 
{ 
    AppDelegate *delegate =(AppDelegate *)[UIApplication sharedApplication].delegate; 

    if(delegate.gotNotifcation) 
    { 
     delegate.gotNotifcation = NO; 
     MessageListController *feed = [[MessageListController alloc] init]; 
     [self.navigationController pushViewController:feed animated:NO]; 
    } 
    else 
    { 
     [self.navigationController popViewControllerAnimated:NO]; 
    } 
} 
+0

,您可以更新swift 3中的代碼@Charan Giri – 2017-09-27 05:08:14