如何从App Delegate呈现我的主TabBar控制器?

时间:2012-05-29 22:03:11

标签: objective-c ios xcode

我真的很担心这个问题,如果有人能指出我正确的方向,我会很感激......

我正在构建一个带有Tab栏的iOS应用程序,用于主导航。

用户需要先注册/登录,然后才能看到主屏幕和标签栏。

用户可以使用Facebook连接登录和注册。

该应用与我们自己的API进行通信。

目前......当加载UITabBarController的初始视图时,它将检查当前用户是否存在,如果没有,将显示登录屏幕。

if (sessionID == (id)[NSNull null] || sessionID.length == 0){
    NSLog(@"session ID was null");
    SHOW_SIGN_IN_SCREEN;
}

#define SHOW_SIGN_IN_SCREEN SignInController *controller = [self.storyboard instantiateViewControllerWithIdentifier:@"SignInScreen"];\
[self presentViewController:controller animated:NO completion:nil];

从登录屏幕...用户可以触摸“使用Facebook登录”按钮或创建一个新的帐户,该帐户将转到Sign Up 屏幕。注册屏幕有一个表格供用户填写,或者他们可以点击“注册Facebook”按钮,使用Facebook图表提供的Facebook详细信息创建一个帐户。

Facebook回调全部由应用代表处理,这是我遇到的问题。

API不关心从应用程序发送的用户凭据是针对新用户还是现有用户。在任何一种情况下,API都会返回应用程序的有效会话ID以继续。

API响应后,应用程序委托应该将用户转回主标签栏视图控制器,这是我卡住的地方。

目前,我在AppDelegate中有这个

// app delegate
-(void)segueToMainTabController
{
    NSLog(@"segueToMainTabController");
    SignInController *controller = (SignInController *)[self.window.rootViewController presentedViewController];
    [controller segueToWelcomeScreen];
}

// sign in controller 
-(void)segueToWelcomeScreen
{
    NSLog(@"segueToWelcomeScreen");
    [self performSegueWithIdentifier:@"SignInToMainTabBar" sender:self];
}

正在调用哪个 但是没有执行segue ...

有人可以建议为什么没有执行这个segue?

由于

1 个答案:

答案 0 :(得分:0)

我有一个应用程序,我需要在我的AppDelegate中劫持初始视图,所以也许你可以做类似的事情。根据您的情况,也许可以尝试在application:didFinishLaunchingWithOptions:

中添加这样的内容
if (sessionID == (id)[NSNull null] || sessionID.length == 0){
    // whatever you need to do to initialize for the login screen
    // you should make the login view the initial view in your storyboard
}
else { // hijack the initial view to show the tab bar   
    UIStoryboard *storyboard = self.window.rootViewController.storyboard;
    MyTabViewController *tabViewController = [storyboard instantiateViewControllerWithIdentifier:@"MyTabViewController"];

    self.window.rootViewController = tabViewController;
    [self.window makeKeyAndVisible];
}

希望有所帮助。