12

我正在学习 ios/xcode 并且遇到了障碍。

我有一个基于 tabbarcontroller+navigation 的设计。如果用户未登录,我需要显示一个登录屏幕。这是基本的层次结构。登录页面需要一个导航栏(因为我遵循的教程在栏上放置了一个“开始”按钮。

LoginController: (LTController.h,.m)

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

故事板布局

我在这里阅读了很多关于模态视图、委托方法等的帖子。其中大多数是代码片段,不幸的是,对于我的初学者来说有点过头了。

希望能简单解释一下如何实现这一点。特别是关于哪些文件需要更改的注释会很棒。

谢谢

4

2 回答 2

12

这是场景。它是如此简单。我只希望它有用。

在此处输入图像描述

对于 UITableBarController,为故事板 id指定一个身份名称在此处输入图像描述

然后在您的 ViewController 类文件中您拥有身份验证凭据 >.? 在那边做一些验证。然后按照此代码。它工作正常

- (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];
        } 
于 2013-05-03T04:33:08.473 回答
10

看起来你有了一个好的开始。由于您有标签栏设计,因此您必须选择如何显示登录页面以及何时显示。

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

这是我推荐的一般概念。

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

b) 在 View will load 附加到标签栏的第一个视图控制器的方法中添加对此标志的检查。

c) 直接从视图控制器呈现一个模式登录页面。如果他们登录,很好地关闭它,如果没有,他们就会卡在模式页面上。

所以,这里基本上是如何做到这一点的:

为了解释的目的,我将调用你的第一个视图控制器 - 你的标签栏控制器上的第一个标签 - fviewController - 好吗?

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

}

还有几点看起来你正在使用故事板和segues。在这种情况下,您将执行以下操作:

  • 为您的登录页面创建一个新的视图控制器
  • 控制从标签栏中的第一个视图控制器拖动一个segue连接到它
  • 将 segue 标识为“模态”
  • 为登录视图控制器创建一个新的视图控制器类
  • 展示您的视图并管理您的身份验证
  • 如果用户已登录,您需要将其存储回 NSUserDefaults 注意:如果您有多个用户或其他方案,您可能需要修改我在示例中显示的单个值 go track status for current user。另外:如果您有注销代码,则需要正确设置标志。另外:如果用户要经常登录和注销,那么会出现使用视图而不是视图加载。

翻转状态:

   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 ... 在 segue 发生之前初始化变量。如果您正在做一些教程,您可能已经阅读过它。

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

祝你好运。

于 2013-05-03T04:28:02.043 回答