如何从AppDelegate打开特定的ViewController?

时间:2015-11-03 13:29:50

标签: ios objective-c

我知道这个问题已被多次询问过。但我是一个新手,我无法找到任何解决方案来帮助我。这是一个简短的解释:

我有一个以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

2 个答案:

答案 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访问它们并更改其属性。