基于故事板的模式登录屏幕示例

时间:2013-05-03 03:56:03

标签: ios storyboard modal-dialog

我正在学习ios / xcode和路障。

我有一个tabbarcontroller +基于导航的设计。如果用户没有登录,我需要提供登录屏幕。这是基本的层次结构。登录页面需要一个navigationBar(我按照的教程在栏上放了一个“Go”按钮。

LoginController: (LTController.h,.m)

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

Storyboard layout

我在这里看了很多关于模态视图,委托方法等的帖子。其中大部分是代码片段,遗憾的是我的初学者水平有点过头了。

很欣赏如何实现这一点的简单解释。特别是关于哪些文件需要更改的说明会很棒。

感谢

2 个答案:

答案 0 :(得分:12)

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

enter image description here

对于UITableBarController,为 storyboard id提供身份名称 enter image description here

然后在您的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];
        } 

答案 1 :(得分:10)

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

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

这是我推荐的一般概念。

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

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

c)直接从视图控制器提供模态登录页面。如果他们登录,很好的解雇它,如果没有,他们就会被困在模态页面上。

所以,基本上这是怎么做的:

为了解释,我将打电话给你的第一个视图控制器 - 你的tabbar控制器上的第一个标签 - 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 注意:如果您有多个用户或其他方案,您可能希望修改我在当前用户的示例跟踪状态中显示的单个值。 另外:如果您有注销码,则需要正确设置标志。 另外:如果用户要经常登录和注销,则会出现使用视图而不是查看加载。

要翻转状态:

   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:^{

        }];

所以你的逻辑就像这样 - 他们登录了吗?是,然后为登录设置YES状态,然后关闭。如果他们不登录,什么也不做。他们被困住了。

最后,如果您需要设置登录控制器,您将使用方法:prepareForSegue ...在segue发生之前初始化变量。如果你正在做一些教程,你可能已经阅读过它。

嗯......希望有所帮助。这是一种非常基本的方法。如果能够正常工作,您可以继续为其添加更多安全性和功能。

祝你好运。