如何在Tabbar Controller之前显示登录视图?

时间:2012-04-23 13:30:42

标签: iphone ios xcode uitabbarcontroller loginview

我目前开发的iOS应用程序允许用户查阅他们的帐户(在网站上创建帐户)。

我希望用户在连接后可以查询他的帐户。所以,我想要一个第一个视图,它将是一个登录视图。 接受连接后,登录视图消失,第一个视图控制器加载数据。

我该怎么做?

3 个答案:

答案 0 :(得分:6)

在FirstViewController的viewDidAppear上添加以下代码,以在选项卡之前显示Login ViewController。

- (void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];

    AppDelegate * delegate = [[UIApplication sharedApplication] delegate];
    if (!delegate.login) {  // BOOL value to know if user is logged in or not.If user succefully logged in set value of this as YES else NO.
    LoginViewController * lvc = [[LoginViewController alloc] initWithNibName:@"LoginViewController" bundle:nil];

    [self presentModalViewController:lvc animated:NO];
    [lvc release];


    }
}

答案 1 :(得分:3)

您可以使用presentModalViewController(_:animated:completion:)来显示登录视图控制器。

成功登录后使用dismissModalViewControllerAnimated(_:completion:)关闭该视图控制器,以便您可以看到标签栏。

答案 2 :(得分:1)

我尝试了模态视图控制器方法(即,在启动时以模态方式显示您的登录视图控制器,animated:设置为false),但是有一些问题:如果您尝试过早地提供它(即viewWillAppear(animated:)),它没有显示。如果你尝试得太晚(即viewDidAppear(animated:)),基础视图控制器只会瞬间“显示”(至少在iOS 8上)。

相反,我所做的是使用登录视图控制器作为窗口的根视图控制器(设置为主故事板的初始视图控制器)启动我的应用程序,并且一旦身份验证成功,我“交换”我的应用程序主标签栏控制器的根视图控制器(我实例化懒惰形成一个单独的故事板)。

要实现平滑过渡(动画),而不是立即,我在登录视图控制器中使用如下代码:

// Run this code when authentication succeeds:

UIView.transitionWithView(self.view.window,
            duration: 0.3,
            options: UIViewAnimationOptions.TransitionCrossDissolve,
            animations: {
                window.rootViewController = tabBarController
            },
            completion: nil
        )

想法来自here

我遇到的一个问题是,我插入的标签栏在所选(当前)标签中包含一个导航控制器,在转换过程中,导航栏会向上移动并“低估”应用程序的状态bar,只有在动画完成时跳回到正确的位置。非常烦人......我通过将这行代码添加到导航控制器中包含的子视图控制器来解决这个问题:

override func viewWillAppear(animated: Bool)
{
    super.viewWillAppear(animated)

    self.navigationController?.navigationBar.layer.removeAllAnimations()
}

修复自here

更新:我注意到在某些模拟器(iPhone 6 +,iOS 9.0)上,导航栏“跳转”不会发生,而是快速(但温和)动画将其带入地点。