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 ...
随机推荐
- PT100三线制恒流源接法
http://www.eepw.com.cn/article/189480_2.htm 下图为恒流源激励的三线制Pt100的一种典型接法.其基本原理是假设Pt100的三条引线采用相同长度的同型线缆,具 ...
- Failure [INSTALL_FAILED_OLDER_SDK] [每件问题100块]
问题描述:链接真机时候出现的问题 解决问题: minSdkVersion 10targetSdkVersion 22 修改这两个值
- MVC页面跳转,路径重复的问题
window.location.replace("../Home/xxx") 这是js路径跳转的示范,如果普通超链接也一样 前面加一个../
- Jetty - Handler源码分析
1. 描述 基于Jetty-9.4.8.v20171121. Handler是Jetty服务处理器,用户Server处理HTTP请求. Handler可以做如下处理: (1)完全生成HTTP响应: ( ...
- [svc]msmtp+mutt发附件,发邮件给多个人
环境:centos6.7 x86-64 内网有web服务器(curl可展示目录) #预安装软件 yum install lrzsz ntpdate sysstat dos2unix wget teln ...
- redis源码学习_链表
redis的链表是双向链表,该链表不带头结点,具体如下: 主要总结一下adlist.c和adlist.h里面的关键结构体和函数. 链表节点结构如下: /* * 双端链表节点 */ typedef st ...
- 语言中.C文件和.H文件的概念和联系
//a.h void foo(); //a.c #include "a.h" //我的问题出来了:这句话是要,还是不要? void foo() { return; } //main ...
- Oracle密码过期,取消密码180天限制
1.进入sqlplus模式 sqlplus / as sysdba; 2.帐户再改一次密码 alter user 用户名 identified by 原密码; 3.查看用户密码的有效期设置(一般默认的 ...
- 圆角带箭头的提示框css实现
css是一个很强大的东西,很多网页效果,我们可以通过css直接实现.今天给大家分享的是一个用css实现的圆角带箭头的提示框. 效果如下图: 这一个样式主要涉及到了css的边框样式border的运用和定 ...
- javascript对下拉列表框(select)的操作
<form id="f"> <select size="1" name="s"> <option value= ...