Facebook登录模式视图未被解雇

时间:2013-02-01 12:13:41

标签: ios6 uinavigationcontroller uitabbarcontroller modalviewcontroller facebook-login

在应用程序从facebook登录返回后,我遇到了解开模态视图的问题。我已经按照facebook教程对代码进行了一些自由,因为我不想使用app delegate。我发布一些代码片段

我正在使用两个班级。一个类是我的初始视图,如果用户已登录名为DayViewController,则弹出,然后如果用户未登录则弹出我的模态视图.LoginViewController。

还应该注意我正在使用故事板,我构建了我的应用程序,以便DayViewController中嵌入了一个导航栏,然后将其嵌入到标签栏中。我认为我的问题是在facebook教程中他们使用一些代码来获取当前显示的视图,然后忽略它......我无法实现它。

DayViewController类 -

viewDidLoad中

- (void)viewDidLoad
{
    if (FBSession.activeSession.state == FBSessionStateCreatedTokenLoaded) {
        [self openSession];
}else {
    [self showLoginView];
}
   [super viewDidLoad];
}

showLoginView

- (void)showLoginView{

UIViewController *topViewController = [self.navigationController topViewController];
UIViewController *modalViewController = [topViewController presentedViewController];

if (![modalViewController isKindOfClass:[LoginViewController class]]) {


    LoginViewController *lvc = [self.storyboard instantiateViewControllerWithIdentifier:@"loginView"];
    [self presentViewController:lvc animated:NO completion:nil];

} else {
    LoginViewController *loginVC = [[LoginViewController alloc] init];
    [loginVC loginFailed];
}
}

sessionStateChanged

- (void)sessionStateChanged:(FBSession *)session
                  state:(FBSessionState) state
                  error:(NSError *)error
{
switch (state) {
    case FBSessionStateOpen: {

        UIViewController *topViewController =  [self.storyboard instantiateViewControllerWithIdentifier:@"loginView"];



        //LoginViewController *lvc = [self.storyboard instantiateViewControllerWithIdentifier:@"loginView"];

        if ([[topViewController presentedViewController]
             isKindOfClass:[LoginViewController class]]) {
            [self dismissViewControllerAnimated:NO completion:nil];

        }else{
        }
    }
        break;
    case FBSessionStateClosed:

    case FBSessionStateClosedLoginFailed:
        // Once the user has logged in, we want them to
        // be looking at the root view.
        //[self.navController popToRootViewControllerAnimated:NO];

        [FBSession.activeSession closeAndClearTokenInformation];

        [self showLoginView];


        break;
    default:

        break;
}

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

默认OpenSession

- (void)openSession{
[FBSession openActiveSessionWithReadPermissions:nil allowLoginUI:YES completionHandler: ^(FBSession *session,FBSessionState state, NSError *error) {
     [self sessionStateChanged:session state:state error:error];
 }];
}

LoginViewController类---

这个课程没什么戏剧性的,只有通过openSession函数抛出facebook状态的登录按钮

- (IBAction)signInButton:(id)sender {
[self.loginActivityIndicator startAnimating];
dvc = [[DayViewController alloc] init];
[dvc openSession];

//[self dismissViewControllerAnimated:YES completion:Nil];
}

0 个答案:

没有答案