У меня есть приложение, в котором используется XIB, а не раскадровка. Корневой контроллер - это TabBarController. Есть 5 вкладок, и каждая вкладка содержит NavigationController. То, что я хотел бы сделать, - это приложение PUSH на определенный контроллер просмотра всякий раз, когда пользователь нажимает на полученное Push-уведомление. В моем didFinishLaunchingWithOptions у меня есть (среди других настройки вещей):Контроллер Push View при получении уведомления о выходе iOS
window.rootViewController = self.tabBarController;
[window makeKeyAndVisible];
В более позднем коде:
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {
[PFPush handlePush:userInfo];
if (application.applicationState == UIApplicationStateInactive) {
[self handleRemoteNotificationWithPayload:userInfo];
}
}
-(void)handleRemoteNotificationWithPayload:(NSDictionary *)payload {
NSLog(@"User tapped notification");
NewsViewController *dvController8 = [[NewsViewController alloc] initWithNibName:@"NewsViewController" bundle:[NSBundle mainBundle]];
[self.tabBarController.navigationController pushViewController:dvController8 animated:YES];
}
Однако, вообще ничего не происходит, когда я нажимаю на уведомление, хотя NSLog делает огнь в консоли , Предложения?
Основа ответа, у меня теперь есть
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {
[PFPush handlePush:userInfo];
UINavigationController *nav = (UINavigationController *) self.tabBarController.selectedViewController;
NewsViewController *dvController8 = [[NewsViewController alloc] initWithNibName:@"NewsViewController" bundle:[NSBundle mainBundle]];
[nav pushViewController:dvController8 animated:YES];
}
Но это работает только, если приложение уже работает приостановлено в фоновом режиме. Если он разбился, или пользователь заставил его закрыть приложение-коммутатор, он просто откроет приложение, а не нажимает контроллер.
EDIT:
Вот didFinishLaunchingWithOptions
метод:
UIUserNotificationType userNotificationTypes = (UIUserNotificationTypeAlert |
UIUserNotificationTypeBadge |
UIUserNotificationTypeSound);
UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:userNotificationTypes
categories:nil];
[[UIApplication sharedApplication]
registerUserNotificationSettings:settings];
[application registerUserNotificationSettings:settings];
[application registerForRemoteNotifications];
Хорошо, я изменил это, и он открывает NewsViewController, как и ожидалось, с одной небольшой проблемой. Он делает это каждый раз, когда приложение открывается после принудительного закрытия (а не только приостановлено в фоновом режиме), а не только при нажатии на уведомление. Что может быть причиной этого? – user717452
Любые идеи о том, почему это делается? – user717452
Если я поместил '[self handleRemoteNotificationWithPayload: userInfo];' в метод 'didFinishLaunchingWithOptions', контроллер будет нажат каждый раз, когда приложение будет открыто, а не только при получении уведомления. Можете ли вы увидеть редактирование OP на том, как этот метод в настоящее время отображается и помогает мне? – user717452