BLOCK方式实现OC程序中多个页面判定用户是否登录
在程序中经常会遇到这种情况,用户刚进入我们软件的时候我们是无需要求用户登录的,但是在下面的页面中,例如收藏,购买等页面的时候,显然在多个页面需要多次判定用户是否登录.试着用block简单的实现了一下该功能,先上代码,代码下面统一解释.
#import "AppDelegate.h"
#import "LoginViewController.h"
#import "CollectViewController.h"
@implementation AppDelegate - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// 这3行代码 的作用 是从持久化中移除已经存储的用户数据
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults removeObjectForKey:@"username"];
[defaults removeObjectForKey:@"password"];
//
UITabBarController *tabBarController = (UITabBarController *)[self.window rootViewController];
tabBarController.delegate = self;
// Override point for customization after application launch.
return YES;
}
- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController
{
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSString *userName = [defaults objectForKey:@"username"];
NSString *password = [defaults objectForKey:@"password"];
if (userName != nil && password != nil) {
NSLog(@"已经登录过"); }else{
UIStoryboard *storyBoard = [UIStoryboard storyboardWithName:@"Main" bundle:nil]; LoginViewController *loginVC = [storyBoard instantiateViewControllerWithIdentifier:@"login"];
loginVC.successBlock = ^(id info){
tabBarController.selectedViewController = viewController;
//此处的block可以将其参数传到这个页面,在执行这个代理方法的时候.需要将参数传到哪一个页面,就在哪一个页面实现以下block.请参看下一段代码,其参数为一个字典,可以在此处打印
NSLog(@"%@",info);
};
[tabBarController setSelectedIndex:0];
[tabBarController presentViewController:loginVC animated:YES completion:nil];
} }
上文中,使用了AppDelegate中的一个代理方法,以及tabbarcontroller 的一个选中的代理方法.
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
这个代理方法,是程序已经运行,并且用户已经登录成功之后,需要执行的代理方法.
在这个方法中,我们使用了NSUserDefaults这个类,详细介绍课参照本人的上一篇博客.登录结束后,使用这个方法将用户默认的配置文件中的用户名和密码移除,如果不移除的话,运行之后就可以直接登录了.
- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController
在第二个代理方法中,用户显然是选中了一个控制器,这个时候,我们首先判断,用户的默认配置文件中的用户名和密码是否还是存在的.如果不是nil,显然,用户已经是登录成功了,我们是需要空实现,或者简单的打一个log即可.
如果不是,显然,用户还是没有登录的.我的程序使用了storyboard,需要注意的是其使用的过程中初始化的方法,显然,故事版一般只 有一个,里面你搭建好的控制器也是唯一存在的一个,他有自己唯一的标示符.我们可以使用和故事版中和其相同的类创建一个实例.也就是出现了一个登录界面. 这里就不再一一赘述了.
[tabBarController setSelectedIndex:0];//此处,如用户在第二个item中点击登录,但是密码输入错误后,还是会进入到了第二个item,但是我们默认的设置是
不登陆的话,不能进入到第二个item.
以下是登录界面的是实现代码:
- (IBAction)login:(id)sender {
if ([_userNameTF.text isEqualToString:@"test"]&&[_passwordTF.text isEqualToString:@"123456"]) {
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
[userDefaults setObject:_userNameTF.text forKey:@"username"];
[userDefaults setObject:_passwordTF.text forKey:@"password"];
NSLog(@"验证成功");
NSDictionary *userInfo = [NSDictionary dictionaryWithObjectsAndKeys:@"111",@"nickname",@"28",@"age",@"100000",@"money", nil];
[self.presentingViewController dismissViewControllerAnimated:YES completion:^{
_successBlock(userInfo);
}];
}else{
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"密码或用户名错误" message:@"测试账号:test,密码:123456" delegate:nil cancelButtonTitle:@"ok" otherButtonTitles: nil];
[alert show];
}
}
BLOCK方式实现OC程序中多个页面判定用户是否登录的更多相关文章
- SAP SMARTFORMS-基于内存方式在report程序中传递数据到smartforms显示
一.准备工作 1.新建include程序 1> include程序名字:ZDD_INC_0104 2> ZDD_INC_0104 程序中的内容为 2.使用T-CODE :SE11新建两个 ...
- 关于微信小程序中组件和页面对全局样式的继承性
1.组件只能继承全局样式中的font和color(backgroundcolor不继承) 2.页面可以继承全局样式中所有样式
- 小程序中 wx.navigateTo 页面跳转没有反应?
页面js文件中加入 show: function () {wx.navigateTo({url: ‘/pages/show/show’})} 这个函数 目的在于要做跳转到新的页面,但是你可能会遇到一个 ...
- SQLServer中用户 'sa' 登录失败解决办法
今天下午,很奇怪的网站突然就打不开了,报错如下: “/”应用程序中的服务器错误. 用户 'sa' 登录失败. 说明: 执行当前 Web 请求期间,出现未处理的异常.请检查堆栈跟踪信息,以了解有关该错误 ...
- Android程序中--不能改变的事情
有时,开发人员会对应用程序进行更改,当安装为以前版本的更新时出现令人惊讶的结果 - 快捷方式断开,小部件消失或甚至根本无法安装. 应用程序的某些部分在发布后是不可变的,您可以通过理解它们来避免意外. ...
- struts2学习笔记(三)—— 在用户注冊程序中使用验证框架
实现目标: 1.使用验证框架对用户注冊信息进行验证 2.验证username.password.邮箱不能为空 3.验证username.password长度 ...
- 在小程序中实现 Mixins 方案
摘要: 小程序开发技巧 作者:jrainlau 原文:在小程序中实现 Mixins 方案 Fundebug经授权转载,版权归原作者所有. 在原生开发小程序的过程中,发现有多个页面都使用了几乎完全一样的 ...
- 小程序中嵌套的h5页面设置分享转发
场景描述:当在小程序中打开h5页面时,希望小程序的转发出去的标题,图片,跳转link可以通过h5通信实现自定义. 实现方式:通过h5给小程序通信,发送标题,图片,跳转link等信息,让小程序设置分享. ...
- 微信小程序中路由跳转
一.是什么 微信小程序拥有web网页和Application共同的特征,我们的页面都不是孤立存在的,而是通过和其他页面进行交互,来共同完成系统的功能 在微信小程序中,每个页面可以看成是一个pageMo ...
随机推荐
- 使用ng-grid实现可配置的表格
使用Angularjs在带来方便的同时,也有一些遗憾:很多基于jquery或其它的组件,在angularjs中需要集成一下才能用得流畅.但是一些比较复杂的组件,集成起来的工作量相当大,比如说grid. ...
- Spark-shell 启动WARN---java.net.BindException: Address already in use
同时打开了两个SecureCRT的终端界面,其中一个已经进入了Spark-shell,在另一个SecureCRT界面中执行 "spark-shell --master yarn --depl ...
- linux下Samba服务配置
SMB是基于客户机/服务器型的协议,因而一台Samba服务器既可以充当文件共享服务器,也可以充当一个Samba的客户端,例如,一台在Linux 下已经架设好的Samba服务器,windows客户端就可 ...
- SMARTY 变量
变量 模板变量以美元符号$开头,由字母.数组和下划线组成,和 PHP variable相似. 变量可以引用数字索引或非数字索引的数组,对象的属性和方法等. 配置变量 是例外的,它不是以美元符号$开头, ...
- Ajax同步与异步优缺点与使用
一.什么是同步请求:(false) 同步请求即是当前发出请求后,浏览器什么都不能做,必须得等到请求完成返回数据之后,才会执行后续的代码,相当于是排队,前一个人办理完自己的事务,下一个人才能 ...
- JS——简单的正则表达式验证
<!-- 用户注册:结构层:html;表现层:css;行为层:javascript; html利用ul,li来构造: 注意事项:1.每个Input都要有相应的id,这是在js中去调用的. 2.& ...
- elasticsearch插件三—— Marvel插件安装详解
2016年05月21日 22:58:13 阅读数:23058 一.Marvel插件介绍 Marvel插件:在簇中从每个节点汇集数据.这个插件必须每个节点都得安装. Marvel是Elasticsear ...
- sql把varchar转化为int型
select Max(convert(int,id))from member_Info;
- css3学习笔记(一)
1. IE下的渐变: filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff',endColorstr='# ...
- pycharm重置设置,恢复默认设置
备忘,备忘,备忘 window 系统 找到下方目录-->删除. 再重新打开pycharm # Windows Vista, 7, 8, 10: <SYSTEM DRIVE>\User ...