3

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

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

我怎样才能做到这一点?

4

3 回答 3

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


    }
}
于 2012-04-23T14:09:46.640 回答
3

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

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

于 2012-04-23T13:43:43.117 回答
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
        )

想法取自这里

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

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

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

修复取自这里

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

于 2015-08-13T01:37:26.840 回答