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

我正在学习ios / xcode并在路障中。

我有一个tabbarcontroller +导航的devise。 如果用户没有login,我需要提供一个login屏幕。这里是基本的层次结构。 login页面需要一个导航条(就像我跟着的教程在条上放一个“Go”button。

LoginController: (LTController.h,.m) Main View:TabBarController> NavigationController>View1>View1a NavigationController>View2 

故事板布局

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

将不胜感激一个简单的解释,如何实现这一点。 特别是文件需要改变的说明会很好。

谢谢

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

在这里输入图像说明

为UITableBarController提供一个名称为故事板ID的标识 在这里输入图像说明

然后在你的ViewController类文件中,你有authentication凭证。 在那里做一些东西进行身份validation。 然后按照这个代码。 它工作正常

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

看起来你是一个好的开始。 既然你有一个tabbardevise,你必须做出如何呈现login页面的select,以及什么时候可以这样做。

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

这是我推荐的一般概念。

a)在某处创build持久存储variables以确定用户是否login。

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

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

所以,这里基本上是这样做的:

为了解释的目的,我会打电话给你的第一个视图控制器 – 你的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]; } } 

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

  • 为您的login页面创build一个新的视图控制器
  • 控件从你的tabbar的第一个视图控制器拖动一个segue连接到它
  • 将segue识别为“modal”
  • 为login视图控制器创build一个新的视图控制器类
  • 呈现您的观点并pipe理您的身份validation
  • 如果用户login,则需要将其存储回NSUserDefaults注意:如果您有多个用户或其他scheme,则可能需要修改我在当前用户的示例go track状态中显示的单个值。 另外:如果你有注销代码,你需要正确设置标志。 另外:如果用户要频繁login和注销,那么使用视图将会出现而不是视图加载。

翻转状态:

  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 

解雇模态观点。 技术上你应该使用委托callback来做到这一点,但如果你想保持简单,这应该是好的

  [self dismissViewControllerAnimated:YES completion:^{ }]; 

所以你的逻辑就是这样 – 他们login了吗? 是的,然后设置为login状态,然后解雇。 如果他们不login,什么都不要做。 他们被卡住了。

最后,如果你需要设置你的login控制器,你可以使用下面的方法:prepareForSegue …在变化发生之前初始化variables。 如果你正在做一些教程,你可能已经阅读过了。

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

祝你好运。