我知道这个问题已被多次询问过。但我是一个新手,我无法找到任何解决方案来帮助我。这是一个简短的解释:
我有一个以root身份使用UITabBarController的应用程序。
在app委托中,我检查用户是否已经登录。如果是,我将打开根控制器。
self.window.rootViewController = [[UIStoryboard storyboardWithName:@"Main" bundle:[NSBundle mainBundle]] instantiateInitialViewController];
我的申请工作正常。但现在我需要实施通知。当我在didFinishLaunchingWithOptions
中收到通知内容时:
NSDictionary *notificationPayload = launchOptions[UIApplicationLaunchOptionsRemoteNotificationKey];
NSString *messageType = [notificationPayload objectForKey:@"messageType"];
现在,如果有消息:
if (messageType.length > 0 )
{
//Here based on message I need to open different tabs of TabBarViewController
UITabBarController *tabBarController = (UITabBarController *)self.window.rootViewController;
//RootTabBarViewController *listingVC = [[RootTabBarViewController alloc] init];
[(UINavigationController *)self.window.rootViewController pushViewController:tabBarController animated:YES];
}
上面的这段代码对我不起作用。 而且我也不知道如何在这里打开不同的标签并为其徽章赋值。它始终使用这些代码导航到第一个索引选项卡。我看到其他答案说:
self.tabBarController.selectedIndex = 2;
但是对我不起作用。我已经实现了一个UITabBarController
类,我可以从那里设置每个标签项徽章的值,但我在AppDelegate中得到了notificationPayLoad
。
答案 0 :(得分:0)
正如您所说,您正在使用带故事板的TabBarController。那你为什么要再次初始化?您可以按照以下步骤进行操作
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
if([[NSUserDefaults standardUserDefaults]boolForKey:@"Selected"])
{
[[NSUserDefaults standardUserDefaults]setBool:NO forKey:@"Selected"];
UITabBarController *tabController = (UITabBarController*)self.window.rootViewController;
tabController.selectedIndex=1;
}else{
[[NSUserDefaults standardUserDefaults]setBool:YES forKey:@"Selected"];
UITabBarController *tabController = (UITabBarController*)self.window.rootViewController;
tabController.selectedIndex=0;
}
return YES;
}
这里我只是展示一个演示代码,用于在didFinishLaunching中的不同selectedIndex访问TabbarController。
答案 1 :(得分:0)
假设您已在故事板中设计(拖放UITabBar / UITabBarController)。
if (messageType.length > 0 )
{
//Here based on message I need to open different tabs of TabBarViewController
NSUInteger indexOfRequiredTab = 2;// pass the index of controller here
id rootObject = self.window.rootViewController;
if ([rootObject isKindOfClass:[UITabBarController class]]) {
UITabBarController *tabBarControllerObject = (UITabBarController *)rootObject;
if (indexOfRequiredTab != NSNotFound && indexOfRequiredTab < tabBarControllerObject.tabBar.items.count) {
tabBarControllerObject.tabBar.items[indexOfRequiredTab].badgeValue = @"2"; //to set badge value
tabBarControllerObject.selectedIndex = indexOfRequiredTab; //Setting this property changes the selected view controller to the one at the given index in the viewControllers array
}
}
}
故事板上设计的视图已初始化,我们可以使用IBOutlet
访问它们并更改其属性。