5

Mein Ziel ist es, einen Code zu schreiben, der, wenn ein Benutzer eine Push-Benachrichtigung erhält, möchte ich diesen Benutzer zu einer anderen Ansicht umgeleitet werden. Wenn der Benutzer kommt mit der Push-Benachrichtigung und wenn er zum ersten Mal den Controller (Willkommen zu Hause Bildschirm usw. (aber nicht angemeldet))Umleiten einer Ansicht mit Push-Benachrichtigung in AppDelegate

var rootViewController = self.window!.rootViewController as! ViewController 
rootViewController.performSegueWithIdentifier("hospitalSegue", sender: self) 

Zeilen Code arbeitet, Dieses Paar jedoch angesehen wurde, wenn die Benutzer war in einem anderen View-Controller (Anmelden/Login/Benutzer-Seite usw.) Dieser Codeabschnitt funktioniert nicht und Redirect. Ich habe alles versucht und kann immer noch keine Lösung finden. Mein Endziel ist das:

if let rootViewController = self.window!.rootViewController as? ViewController 
{ 
    var rootView: UserViewController = UserViewController() 

    if let window = self.window{ 
     window.rootViewController = rootView 
    } 

    rootViewController.performSegueWithIdentifier("hospitalSegue", sender: self) 
    println(self.window?.rootViewController) 
} 

Kann mir jemand eine Idee geben?

+0

Klingt wie eine großartige Idee. Wie erhalten Sie die Push-Benachrichtigungen? Und vielleicht können Sie uns einen Überblick über Ihre Ansichten innerhalb des InterfaceBuilders geben, es hängt von Ihrer Hierarchie ab, wie Sie zu einer anderen Ansicht umleiten. –

+0

Wird modal ein 'UIViewController' angezeigt? – Lefteris

+2

Verwenden Sie ein NSNotificationCenter. https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSNotificationCenter_Class/ –

Antwort

1

Der Antwortcode ist Objective-C, ich möchte über Logik sprechen. Um dies zu tun, müssen Sie beim Erstellen Ihrer Push-Benachrichtigung userInfo Wert festlegen, um Daten mit Ihrer Push-Benachrichtigung zu übergeben.

verwenden Delegatmethode: application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler

Sie entscheiden können, ob die Sie durch den Umgang mit userinfo

NSDictionary *segueDictionary = [userInfo valueForKey:@"aps"]; 

NSString *segueName=[[NSString alloc]initWithFormat:@"%@",[segueDictionary valueForKey:@"segueName"]]; 

if([segueName isEqualToString:@"hospitalSegue"]) 
{ 
// implement your code to redirect 
} 
0

Die Antwort-Code ist Objective-C, können Sie von AppDelegate prentviewcontroller zeigen, anzeigen möchten ich benutze die untenstehende Methode, um dieses Problem zu lösen, indem ich den folgenden Code benutze:

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo 
{ 
     [[self topViewController]presentViewController:nav animated:YES completion:nil]; 
} 

- (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; 
    } 
} 
Verwandte Themen