2013-05-03 56 views
12

我正在学习ios/xcode并在路障中。以模式为基础的故事板登录屏幕示例

我有一个tabbarcontroller +基于导航的设计。如果用户没有登录,我需要提供一个登录屏幕。这里是基本的漫画。登录页面需要的导航栏(我跟着教程把一个“转到”按钮栏上。

LoginController: (LTController.h,.m) 

Main View:TabBarController> 
        NavigationController>View1>View1a 
        NavigationController>View2 

Storyboard layout

我对模式的看法,代表法等在这里读到很多帖子的大多数他们都是代码片段不幸的是有点过了头我的初级水平。

将不胜感激一个简单的解释如何实现这一目标。Espacially记哪些文件需要改变将是巨大的。

比ks

+0

我需要一些清晰度,你有1个标签栏与2个图标和一个公共和另一个非公开这是保护身份验证,对不对? – 2013-05-03 04:01:44

+0

@KumarKl号码现在只有一个标签栏有两个标签。登录屏幕只有一个导航栏来放置登录按钮。 – aVC 2013-05-03 04:03:04

+0

K我知道了..等我会放些东西 – 2013-05-03 04:04:33

回答

12

这里是场景。它非常简单。我只希望它会有用。

enter image description here

对于UITableBarController给身份一个名字故事板IDenter image description here

然后在您的视图控制器类文件你有身份验证凭据权>?在那里做一些东西进行认证。然后按照这个代码。它工作正常

- (IBAction)Login:(id)sender { 

    if(authenticated) // authenticated---> BOOL Value assign True only if Login Success 
     { 
      UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil]; 
      UITabBarController *obj=[storyboard instantiateViewControllerWithIdentifier:@"tab"]; 
      self.navigationController.navigationBarHidden=YES; 
      [self.navigationController pushViewController:obj animated:YES]; 
     } 
+1

随意问,如果您有任何问题 – 2013-05-03 04:35:10

+1

非常感谢。通过viewController(你提到要添加代码),你的意思是loginViewController? – aVC 2013-05-03 04:36:57

+1

是的。你有LoginViewController或ViewController的权利。具有主页面的登录页面权限? – 2013-05-03 04:52:17

10

它看起来像你是一个良好的开端。既然你有一个tabbar设计,你必须做出如何呈现登录页面的选择,以及何时你会这样做。

您必须在显示标签栏之前显示它,或者将逻辑放入第一个视图控制器以启动登录过程。还有其他方法,但它们变得更加复杂,我现在想给你基本的选择。

这是我推荐的一般概念。

a)在某处创建持久存储变量以确定用户是否登录。

b)在视图将加载方法的第一个视图控制器附加到您的TabBar的检查此标志。

c)直接从视图控制器呈现模态登录页面。如果他们登录,很好的解雇它,如果不是,他们被困在模态页面上。

因此,这里基本上是如何做到这一点:

解释的目的,我要打电话给你的第一个视图控制器 - fviewController - - 第一个标签您的TabBar控制器上好吗?

在fviewController.m

-(void)viewDidLoad { 

    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 

    if ([[defaults objectForKey:@"loggedIn"]boolValue]) { 
     NSLog(@"user is logged in - do nothing"); 
    } 
    else { 

     NSLog(@"User is not logged in"); 
     [self performSegueWithIdentifier:@"LoginPage" sender:self]; 
    } 

} 

一对夫妇更多的积分 它看起来像你使用故事板和塞格斯。在这种情况下,你会做以下几点:

  • 您的登录页面创建一个新的视图控制器
  • 调速拖动你的TabBar
  • 一个SEGUE连接到它的第一个视图控制器识别SEGUE为“莫代尔”
  • 为登录视图控制器一个新的视图控制器类出示您查看和管理您的身份验证
  • 如果用户登录,您需要存储回NSUserDefaults的 注意:如果您有多个用户或其他方案,则可能需要修改我在当前用户的示例go track状态中显示给您的单个值。 另外:如果您有注销代码,则需要正确设置标志。 另外:如果用户要频繁登录和注销,那么使用视图将会出现而不是视图加载。

要翻转状态:

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
    [defaults setValue:[NSNumber numberWithBool:YES] forKey:@"loggedIn"]; //in 
    [defaults setValue:[NSNumber numberWithBool:NO] forKey:@"loggedIn"]; //out 

    do this in your login controller 

要关闭该模式的看法。从技术上讲,你应该使用委托回调做到这一点,但如果你试图让事情变得简单,这应该是确定

 [self dismissViewControllerAnimated:YES completion:^{ 

     }]; 

所以,你的逻辑是这样的 - 他们没有登录?是的,然后设置为登录状态,然后解雇。如果他们不想登录,不要做任何事情。他们被卡住了。最后,如果你需要设置登录控制器,你可以使用下面的方法:prepareForSegue ...来在变化发生之前初始化变量。如果你正在做一些教程,你可能已经阅读过它。

呃......希望有帮助。这是一个非常基本的方法。如果你得到这个工作,你可以继续添加更多的安全性和功能。

祝你好运。

+0

谢谢你的细节。是的,我正在阅读很多教程。不幸的是,我从头开始包括Obj C,所以我的几率很大。对此,我真的非常感激。我已经涵盖了登录,segue和东西。模态视图显示给了我恶梦。我会试试这个。 – aVC 2013-05-03 04:38:47

+0

我希望我可以接受这两个答案。我赞成你的。我现在正在使用NSUserdefaults教程。谢谢你提到这一点。再次感谢这样的细节和耐心。 – aVC 2013-05-03 05:18:12

+1

如果您使用segue显示登录屏幕,那么您可以使用unwind segue将其解除。请参阅http://stackoverflow.com/questions/12561735/what-are-unwind-segues-for-and-how-to-use-them – 2013-10-30 17:27:02