2012-01-27 68 views
7

我有一个使用故事板开发的ios5应用程序,当前在初始启动时显示标签栏控制器视图。我想在显示标签栏控制器之前显示一个登录屏幕。用户将输入他的用户名密码&,然后系统将认证用户,然后如果成功,显示标签栏控制器。在标签栏控制器显示之前启动登录视图

我已经尝试了以下3个选项,没有运气..任何想法?

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

    // Option 1 
    UITabBarController *tabBarController = (UITabBarController *)self.window.rootViewController; 
    PointsViewController *firstVC = [[tabBarController viewControllers] objectAtIndex:0]; 
    UIViewController *loginViewController = [[LoginViewController alloc] init]; 
    [firstVC.navigationController pushViewController:loginViewController animated:YES]; 

    // Option 2 
    UITabBarController *tabBarController = (UITabBarController *)self.window.rootViewController; 
    UIViewController *loginViewController = [[LoginViewController alloc] init]; 
    [tabBarController presentViewController:loginViewController animated:NO completion:nil]; 

    // Option 3 
    UITabBarController *tabBarController = (UITabBarController *)self.window.rootViewController; 
    UIViewController *loginViewController = [[LoginViewController alloc] init]; 
    [tabBarController presentModalViewController:loginViewController animated:NO]; 

    return YES; 
} 

回答

18

终于想通这一个..这里是你需要做什么:

  1. 添加一个独立的登录视图故事板。

  2. 选择登录视图,并在属性检查器中检查'是初始视图控制器'。这会将正在启动的初始视图从选项卡控制器切换到登录视图,从而解决首先显示登录屏幕的整个问题。

  3. 在登录视图中添加一个按钮,并创建一个按钮来按下按钮时加载选项卡控制器。 (或者,您可以从登录视图创建一个segue到标签控制器视图,并根据需要以编程方式调用segue)。

  4. 选择登录视图和选择选项编辑>嵌入>导航控制器

  5. 在属性检查器的导航控制器,取消选中“显示导航栏”选项(这是一个外观上的改变;我假设你并不需要显示在登录屏幕上的导航条!)

就是这样:)

+0

如何使用segue将值传递给标签栏的firstviewcontroller?我无法得到它的工作 – meda 2013-03-05 16:32:41

+0

你不会传递一个价值与segue。一种可能的选择是将您想要传递的值作为属性存储在您的AppDelegate中,并从目标视图中访问该值。 – 2013-03-06 02:28:11

+0

它的工作原理!但如果密码不正确,如何禁用推送到新窗口? – Gank 2014-11-13 08:44:24

0

您可以使用模态视图。您可以检查用户是否已登录。如果不是,则可以使用模态视图获取登录信息。您可以在故事板中创建UIViewController,然后使用instantiateViewControllerWithIdentifier:方法从故事板创建登录屏幕。然后简单地以模态显示。

+0

你会在哪里启动模式窗口?第一个标签的viewDidAppear方法?有没有一种方法可以在加载标签之前启动模态窗口? – 2012-01-27 20:02:10

+0

如果您希望在渲染事物之前显示它,那么您将使用viewWillAppear进行检查并启动模态视图。一旦你模态地打开一个新的视图控制器/视图,处理等待,直到模态视图关闭。该方法将位于选项卡控制器的根视图控制器中,而不是选项卡控制器。如果需要,可以将它放置到您的每个Tab控件的根视图控制器中,或者您可以对UIViewControl进行子类化并为每个控件使用它。 – Rob 2012-01-28 04:14:16

+1

我试过了。我看到发生的事情是,最初的选项卡被加载,然后模态窗口覆盖在它的顶部。在视觉上这不令人愉悦。我希望用户先看到登录窗口。我从第一个选项卡上的viewWillAppear方法启动了登录视图。这是我的代码的样子。

 - (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; // Display the login view modally [self performSegueWithIdentifier:@"ShowLogin" sender:self]; }
2012-02-02 03:23:08

0

我刚才遇到了这个问题,我已经完全通过添加以下代码,您也没有使用解决了这个。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 
    ... 
    [self.window makeKeyAndVisible]; 
} 
相关问题