0

Facebook のログインが成功したら、ViewControllers を使用して tabbarcontroller を追加する必要がありますが、方法がわかりませんか?

私は 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];


}

しかし、fBLogin に追加された tabbarcontroller を確認できませんでした。空の白いビューが表示されます。

そうですか。どうすれば達成できますか?

4

2 に答える 2

3

を設定して初期化するだけで、サインUITabBarControllerインAppDelegateに成功したら、カスタムメソッド For Ex を使用しUITabBarControllerて rootViewController として呼び出すだけwindowです...

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

完全にサインインしたら、以下のカスタム メソッドを呼び出すだけです。

-(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"];
}

このメソッドを呼び出したい場合は、オブジェクトを作成して、次のようにこのメソッドを呼び出します...

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

これがお役に立てば幸いです...

于 2012-12-18T10:41:01.167 に答える
0

コードを からviewDidLoadに移動してみてくださいviewDidAppear

于 2012-12-18T09:50:52.607 に答える