Sindhia
Sindhia

Reputation: 411

Adding a UITabbarController in appdelegate in xcode?

I need to add a tabbarcontroller with ViewControllers when Facebook login is successful.BUt Couldn't understand how?

I have in appDelegate.m:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{

SearchView *first=[[SearchView alloc]
                                initWithNibName:@"SearchView" bundle:nil];


    Login *second=[[Login alloc]initWithNibName:@"Login" bundle:nil];
    second.title=@"Login";
    NSArray *viewArray=[[NSArray alloc] initWithObjects: first,second,nil];
    tabBarController=[[UITabBarController alloc] init];
    [tabBarController setViewControllers:viewArray animated:NO];
    [self.window addSubview:tabBarController.view];
    [self.window makeKeyAndVisible];
    [viewArray release];
    [first release];
    [second release];    
    return YES;


}




}
- (void)sessionStateChanged:(FBSession *)session
                      state:(FBSessionState) state
                      error:(NSError *)error
{
    switch (state) {
        case FBSessionStateOpen:
            if (!error) {
                FBLogin *fblogin=[[FBLogin alloc]initWithNibName:@"FBLogin" bundle:nil];
               [self.window addSubview:fblogin.view];
 }
            break;
        case FBSessionStateClosed:
        case FBSessionStateClosedLoginFailed:
            [[FBSession activeSession] closeAndClearTokenInformation];
            break;
        default:
            break;
    }

    [[NSNotificationCenter defaultCenter]
     postNotificationName:FBSessionStateChangedNotification
     object:session];

    if (error) {
        UIAlertView *alertView = [[UIAlertView alloc]
                                  initWithTitle:@"Error"
                                  message:error.localizedDescription
                                  delegate:nil
                                  cancelButtonTitle:@"OK"
                                  otherButtonTitles:nil];
        [alertView show];




    }
}

In FBLogin.m :
-(void)viewDidAppear:(BOOL)animated
{

            SearchView *searchViewController=[[SearchView alloc]initWithNibName:@"SearchView" bundle:nil];
            UserProfile *userprofile=[[UserProfile alloc]initWithNibName:@"UserProfile" bundle:nil];
            userprofile.title=@"My Profile";
            LogOut *logout=[[LogOut alloc]initWithNibName:@"LogOut" bundle:nil];
            logout.title=@"Sign Out";
            tab=[[UITabBarController alloc]init];
            tab.viewControllers=[NSArray arrayWithObjects:searchViewController,userprofile,logout, nil];
            [self presentModalViewController:tab animated:NO];


}

But I couldnot see the tabbarcontroller added in fBLogin.I can see an empty white view.

Y is it so ? how can I achieve it ?

Upvotes: 0

Views: 2158

Answers (2)

Paras Joshi
Paras Joshi

Reputation: 20541

just set and initialize the UITabBarController in AppDelegate and when you sign in successfull just call UITabBarController as a rootViewController of window with our custom method For Ex...

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
    {
           UIViewController *viewController1 = [[[yourViewController1 alloc] initWithNibName:@"yourViewController1" bundle:nil] autorelease];
            UINavigationController *navviewController1=[[UINavigationController alloc]initWithRootViewController:viewController1];


            UIViewController *viewController2 = [[[yourViewController2 alloc] initWithNibName:@"yourViewController2" bundle:nil] autorelease];
            UINavigationController *navviewController2=[[UINavigationController alloc]initWithRootViewController:viewController2];


            UIViewController *viewController3 = [[[yourViewController3 alloc] initWithNibName:@"yourViewController3" bundle:nil] autorelease];
            UINavigationController *navviewController3=[[UINavigationController alloc]initWithRootViewController:viewController3];


            UIViewController *viewController4 = [[[yourViewController4 alloc] initWithNibName:@"yourViewController4" bundle:nil] autorelease];
            UINavigationController *navviewController4=[[UINavigationController alloc]initWithRootViewController:viewController4];


            UIViewController *viewController5 = [[[yourViewController5 alloc] initWithNibName:@"yourViewController5" bundle:nil] autorelease];
            UINavigationController *navviewController5=[[UINavigationController alloc]initWithRootViewController:viewController5];


            self.tabBarController = [[[UITabBarController alloc] init] autorelease];
            self.tabBarController.viewControllers = [NSArray arrayWithObjects:navviewController1, navviewController2,navviewController3,navviewController4,navviewController5, nil];

        SearchView *first=[[SearchView alloc]
                            initWithNibName:@"SearchView" bundle:nil];


        Login *second=[[Login alloc]initWithNibName:@"Login" bundle:nil];
        second.title=@"Login";
        NSArray *viewArray=[[NSArray alloc] initWithObjects: first,second,nil];
        yourTabBarController=[[UITabBarController alloc] init];
        [yourTabBarController setViewControllers:viewArray animated:NO];
        [self.window addSubview:yourTabBarController.view];

        [self.window makeKeyAndVisible];
        return YES;
    }

when you sign in success full just call bellow our custom method..

-(void)loadTabBarFromDelegate 
{
    self.window.rootViewController = self.tabBarController;
    [self.window makeKeyAndVisible];

    CATransition *animation = [CATransition animation];
    [animation setDelegate:self];   
    [animation setType:kCATransitionFade];
    [animation setDuration:0.5];
    [animation setTimingFunction:[CAMediaTimingFunction functionWithName:
                                  kCAMediaTimingFunctionEaseInEaseOut]];
    [[self.window layer] addAnimation:animation forKey:@"transitionViewAnimation"];
}

and when you want to call this method just create object and call this method like bellow...

AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
[appDelegate loadTabBarFromDelegate];

i hope this help you...

Upvotes: 3

Hesham
Hesham

Reputation: 5274

Try moving your code from viewDidLoad to viewDidAppear.

Upvotes: 0

Related Questions