我学习IOS / Xcode和在一个路障。
我有一个tabbarcontroller +导航为基础的设计。 我需要展示一个登录屏幕,如果用户没有登录。这是基本的层次结构。 登录页面需要的导航栏(我跟着教程放栏上的“开始”按钮。
LoginController: (LTController.h,.m)
Main View:TabBarController>
NavigationController>View1>View1a
NavigationController>View2
我对模式的看法,代表法等读很多帖子,这里大部分都是代码片段不幸的是有点过了头我的初级水平。
希望得到一个简单的解释如何实现这一目标。 Espacially上的说明文件需求的变化将是巨大的。
谢谢
下面是场景。 它的那么简单。 我只是希望,这将是有益的。
对于UITableBarController给出一个名字身份故事板ID
然后在您的视图控制器类文件你有身份验证凭据权>? 做一些东西在那边进行身份验证。 然后按照这个代码。 它工作正常
- (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];
}
它看起来像你有了一个良好的开端。 既然你有一个的TabBar设计,你必须做出关于如何呈现登录页面选择时,你会做到这一点。
你必须要么提出其显示使用TabBar之前,或者把逻辑在你的第一个视图控制器启动登录过程。 还有其他的方法为好,但他们变得更加复杂,我想给你基本的选择现在。
这里是笼统的概念,我建议。
一个)的某处创建持久存储变量,以确定是否一个用户登录与否。
b)中增加一个检查此标志在View将加载附加到的TabBar第一视图控制器的方法。
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];
}
}
一对夫妇更多的点,它看起来像你使用故事板和塞格斯。 在这种情况下,你会做以下几点:
- 创建一个新的视图控制器为您的登录页
- 控件拖动从第一视图控制器在你的TabBar一个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地位登录,然后解雇。 如果它们的DOD没有登陆,什么也不做。 他们被卡住了。
最后,如果你需要设置你的登录控制器,你可以使用方法:prepareForSegue ...的SEGUE发生前初始化变量。 你可能已如果你正在做一些教程,了解它。
嗯...希望帮助。 这是一个非常基本的方法。 如果你是工作,你可以继续你去更多的安全和功能添加到它。
好运。