2012-04-23 86 views
2

我目前正在开发一个iOS应用程序,允许用户查询他们的帐户(在网站上创建帐户)。如何在Tabbar控制器之前显示登录视图?

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

我该怎么做?

回答

6

在viewDidAppear的FirstViewController添加下面的代码显示登录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]; 


    } 
} 
+0

非常感谢!当用户登录时,我打电话给dismissmodelviewcontroller。如果我需要在登录解散时在第一个选项卡上发出请求,我可以在viewdidload中执行此操作吗? – Astram56 2012-04-23 14:15:30

+0

如果您在viewDidLoad()中发出请求,它将在viewDidAppear()之前和LoginViewController.You可以在ViewDidAppear()中提供它,但是每次出现视图时都会调用该视图,而不像viewDidLoad只调用一次。您可以试试看,并选择最好的。 – 2012-04-23 17:01:15

+0

好的,我会试试,谢谢! – Astram56 2012-04-23 19:23:08

3

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

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

+0

谢谢,但我这样做在AppDelegate?如果我需要再次显示登录视图,如果用户注销,我可以在其他视图控制器的任何地方调用presentmodalviewcontroller吗? – Astram56 2012-04-23 14:06:35

+0

@Axton56呈现您在rootview的视图中的loginview会出现的方法。然后登录按钮clik作出nsuserdefault并保存一些值..当用户单击注销登录删除该userdefault并将tabbar selectedindex更改为1。所以查看会出现方法调用,如果用户默认的valueforkey是无den打开loginview。别的dnt开放..我做到了。它会帮助你。 – 2012-04-24 04:48:24

+0

我认为这是个好主意!非常感谢。 – Astram56 2012-04-24 07:10:16

0

我尝试了模态视图控制器的方法(即模态出示您的登录视图控制器在启动时,与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截取)

然而,我遇到的一个问题是,我插入的标签栏包含选定(当前)选项卡中的导航控制器,并且在转换过程中,导航栏会向上移动,并且仅在应用程序的状态栏中“欠下”跳回到正确的位置n动画完成。很讨厌......我固定,通过加入这一行的代码包含在导航控制器子视图控制器:

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

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

(从here采取修复)

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