iOS引导登录、登录引导、login(点击某个功能按钮需要登录并且登录完成后自动跳转到要去的功能实现方法)
2017-05-11 14:21
1061 查看
我们要实现的功能是:
1.未登录的情况下,点击某个按钮进入到不需要登录的功能,则直接进入
2.未登录的情况下,点击某个按钮进入到需要登录的功能A,则先进入登录界面,登录成功后直接跳转到这个功能A,登录不成功不跳转
3.已经登录的情况下,点击某个按钮进入到需要登录的功能A,则直接进入
实现这个功能有简单版的(重复代码会多,容易理解),稍复杂版的(简单版的封装,重复代码少,逻辑稍微有点复杂)
简单版目录截图:
说明:
1是三个功能页面,分别为转账,汇款,借款
2是登录界面,包括:用户名输入框,密码输入框,登录按钮,取消按钮
3是AppDelegate 设置TabbarController
4是TabbarController的viewControllers元素,页面包括三个圆按钮
5是 写宏定义的文件 和 frame的方便调用方法
6是按钮图标
下面说实现过程,只贴关键代码,简单实现的demo地址是:点击打开链接http://download.csdn.net/detail/qq_15509071/9839319
百度网盘的下载地址是https://pan.baidu.com/s/1bphC947
1.用一个全局变量记录是否登录 ,点击一个按钮时,进行判断,如果没有登录则往NSNotificationCenter添加一个观察者和名字然后展示登录界面
2.登录验证成功后,去掉登录页面,并发送通知执行。不成功则在当前页t停留
3.这样基本就实现了,但是有问题。依次点击转账按钮---->出现登录界面--->点取消--->登录界面消失--->点汇款按钮---->出现登录界面--->输入用户名密码点登录。结果是依次进入了转账页面和汇款页面。修改这个问题需要增加一个enum记录引导登录的功能。代码更改为:
4简单的实现就完成了。
5开始对上面代码封装 封装后的代码地址http://download.csdn.net/detail/qq_15509071/9839559
百度网盘的链接地址是 https://pan.baidu.com/s/1qYEwdvm
5.1增加路由类
5.2枚举值声明改为
5.3三个按钮的点击事件改为
5.4登录按钮的事件
k.o.
1.未登录的情况下,点击某个按钮进入到不需要登录的功能,则直接进入
2.未登录的情况下,点击某个按钮进入到需要登录的功能A,则先进入登录界面,登录成功后直接跳转到这个功能A,登录不成功不跳转
3.已经登录的情况下,点击某个按钮进入到需要登录的功能A,则直接进入
实现这个功能有简单版的(重复代码会多,容易理解),稍复杂版的(简单版的封装,重复代码少,逻辑稍微有点复杂)
简单版目录截图:
说明:
1是三个功能页面,分别为转账,汇款,借款
2是登录界面,包括:用户名输入框,密码输入框,登录按钮,取消按钮
3是AppDelegate 设置TabbarController
4是TabbarController的viewControllers元素,页面包括三个圆按钮
5是 写宏定义的文件 和 frame的方便调用方法
6是按钮图标
下面说实现过程,只贴关键代码,简单实现的demo地址是:点击打开链接http://download.csdn.net/detail/qq_15509071/9839319
百度网盘的下载地址是https://pan.baidu.com/s/1bphC947
1.用一个全局变量记录是否登录 ,点击一个按钮时,进行判断,如果没有登录则往NSNotificationCenter添加一个观察者和名字然后展示登录界面
//三个按钮的点击事件 - (void)btnClicked:(UIButton *)btnn{ if (btnn.tag == 0) { // //判断是否登录 登录了直接进 没登录引导登录并登录成功后直接跳到对应业务 // if (APPLICATION.isLogin == YES) { [self jumpToZhuanZhang]; }else{ // //先移除本通知,原因是:点击一个功能跳到登录界面,但是在登录界面点的取消,反复操作,再点这个功能, //相同的通知会增加多次,登陆成功后会多次进入相应的功能 // [[NSNotificationCenter defaultCenter] removeObserver:self name:@"LOGIN_ZZ" object:nil] ; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(jumpToZhuanZhang) name:@"LOGIN_ZZ" object:nil]; LoginViewController *loginVC = [[LoginViewController alloc]init]; [self.navigationController presentViewController:loginVC animated:YES completion:^{}]; } }else if(btnn.tag == 1){ if (APPLICATION.isLogin == YES) { [self jumpToHuiKuan]; }else{ [[NSNotificationCenter defaultCenter] removeObserver:self name:@"LOGIN_HK" object:nil] ; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(jumpToHuiKuan) name:@"LOGIN_HK" object:nil]; LoginViewController *loginVC = [[LoginViewController alloc]init]; [self.navigationController presentViewController:loginVC animated:YES completion:^{ }]; } }else{ if (APPLICATION.isLogin == YES) { [self jumpToJieKuan]; }else{ [[NSNotificationCenter defaultCenter] removeObserver:self name:@"LOGIN_JK" object:nil] ; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(jumpToJieKuan) name:@"LOGIN_JK" object:nil]; LoginViewController *loginVC = [[LoginViewController alloc]init]; [self.navigationController presentViewController:loginVC animated:YES completion:^{ }]; } } } -(void)jumpToZhuanZhang{ ZhuanZhangViewController *vc = [[ZhuanZhangViewController alloc]init]; vc.hidesBottomBarWhenPushed =YES; [self.navigationController pushViewController:vc animated:YES]; } -(void)jumpToHuiKuan{ HuiKuanViewController *vc = [[HuiKuanViewController alloc]init]; vc.hidesBottomBarWhenPushed =YES; [self.navigationController pushViewController:vc animated:YES]; } -(void)jumpToJieKuan{ JieKuanViewController *vc = [[JieKuanViewController alloc]init]; vc.hidesBottomBarWhenPushed =YES; [self.navigationController pushViewController:vc animated:YES]; }
2.登录验证成功后,去掉登录页面,并发送通知执行。不成功则在当前页t停留
- (IBAction)loginBtnClicked:(id)sender { if (self.userName.text.length > 0 && self.passWord.text.length > 0) { APPLICATION.isLogin = YES; [self dismissViewControllerAnimated:YES completion:^{ [[NSNotificationCenter defaultCenter] postNotificationName:@"LOGIN_ZZ" object:nil ]; [[NSNotificationCenter defaultCenter] postNotificationName:@"LOGIN_HK" object:nil ]; [[NSNotificationCenter defaultCenter] postNotificationName:@"LOGIN_JK" object:nil ]; }]; }else{ UIAlertView *alertView = [[UIAlertView alloc]initWithTitle:@"提示" message:@"输入有误" delegate:nil cancelButtonTitle:@"确定" otherButtonTitles:nil, nil]; [alertView show]; } }
3.这样基本就实现了,但是有问题。依次点击转账按钮---->出现登录界面--->点取消--->登录界面消失--->点汇款按钮---->出现登录界面--->输入用户名密码点登录。结果是依次进入了转账页面和汇款页面。修改这个问题需要增加一个enum记录引导登录的功能。代码更改为:
********声明******** typedef enum JumpType{ ZHUANZHANG_HOME_LOGIN = 0, HUIKUAN_HOME_LOGIN , JIEKUAN_HOME_LOGIN , }MYJumpType; ********转账按钮点击事件******** if (btnn.tag == 0) { // //判断是否登录 登录了直接进 没登录引导登录并登录成功后直接跳到对应业务 // if (APPLICATION.isLogin == YES) { [self jumpToZhuanZhang]; }else{ // //先移除本通知,原因是:点击一个功能跳到登录界面,但是在登录界面点的取消,反复操作,再点这个功能, //相同的通知会增加多次,登陆成功后会多次进入相应的功能 // APPLICATION.jumpType = ZHUANZHANG_HOME_LOGIN; [[NSNotificationCenter defaultCenter] removeObserver:self name:@"LOGIN_ZZ" object:nil] ; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(jumpToZhuanZhang) name:@"LOGIN_ZZ" object:nil]; LoginViewController *loginVC = [[LoginViewController alloc]init]; [self.navigationController presentViewController:loginVC animated:YES completion:^{}]; } } ********登录按钮点击事件******** - (IBAction)loginBtnClicked:(id)sender { if (self.userName.text.length > 0 && self.passWord.text.length > 0) { APPLICATION.isLogin = YES; [self dismissViewControllerAnimated:YES completion:^{ if(APPLICATION.jumpType == ZHUANZHANG_HOME_LOGIN){ [[NSNotificationCenter defaultCenter] postNotificationName:@"LOGIN_ZZ" object:nil ]; }else if (APPLICATION.jumpType == HUIKUAN_HOME_LOGIN){ [[NSNotificationCenter defaultCenter] postNotificationName:@"LOGIN_HK" object:nil ]; }else if (APPLICATION.jumpType == JIEKUAN_HOME_LOGIN){ [[NSNotificationCenter defaultCenter] postNotificationName:@"LOGIN_JK" object:nil ]; } }]; }else{ UIAlertView *alertView = [[UIAlertView alloc]initWithTitle:@"提示" message:@"输入有误" delegate:nil cancelButtonTitle:@"确定" otherButtonTitles:nil, nil]; [alertView show]; } }
4简单的实现就完成了。
5开始对上面代码封装 封装后的代码地址http://download.csdn.net/detail/qq_15509071/9839559
百度网盘的链接地址是 https://pan.baidu.com/s/1qYEwdvm
5.1增加路由类
// // RouteManager.h // GuideLoginDemo // // Created by yfc on 17/5/11. // Copyright © 2017年 yfc. All rights reserved. // #import <Foundation/Foundation.h> #import <UIKit/UIKit.h> @interface RouteManager : NSObject + (void)pushViewControllerWithOriginViewController:(UIViewController *)originViewController loginFlag:(NSString *)loginFlag identifier:(const NSString *)identifier otherParameters:(NSDictionary *)parameters; @end
// // RouteManager.m // GuideLoginDemo // // Created by yfc on 17/5/11. // Copyright © 2017年 yfc. All rights reserved. // #import "RouteManager.h" #import "config.h" static RouteManager *routeManager = nil; @interface RouteManager () @property(nonatomic,assign)UIViewController *originViewController; @property(nonatomic,retain)NSString *currentIdentifier; @property(nonatomic,assign)RouteManager *manager_; @end @implementation RouteManager + (RouteManager*)sharedRouteManager{ @synchronized(routeManager) { if(!routeManager) { routeManager = [[RouteManager alloc]init]; } } return routeManager; } + (void)pushViewControllerWithOriginViewController:(UIViewController *)originViewController loginFlag:(NSString *)loginFlag identifier:(const NSString *)identifier otherParameters:(NSDictionary *)parameters;{ RouteManager *manager = [RouteManager sharedRouteManager]; NSLog(@"manager=%@",manager); manager.manager_ = manager; [manager pushViewControllerWithOriginViewController:originViewController loginFlag:loginFlag identifier:identifier otherParameters:parameters]; } - (void)pushViewControllerWithOriginViewController:(UIViewController *)originViewController loginFlag:(NSString *)loginFlag identifier:(const NSString *)identifier otherParameters:(NSDictionary *)parameters;{ self.originViewController = originViewController; self.currentIdentifier = (NSString *)identifier; if ([loginFlag isEqualToString:@"Y"]) { if (APPLICATION.isLogin == YES){ [self pushViewController]; }else{ //引导登录 [self setNotiObserverLogin]; } } else{ [self pushViewController]; } } - (void)setNotiObserverLogin{ APPLICATION.jumpType = ROUTE_MANAGER; [[NSNotificationCenter defaultCenter] removeObserver:self name:@"ROUTE_MANAGER" object:nil]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(pushViewController) name:@"ROUTE_MANAGER" object:nil]; //如果已经有登录页了 不要重复弹出 UINavigationController *topNavi = (UINavigationController*)APPLICATION.window.rootViewController.presentedViewController; for (UIViewController *loginVC in topNavi.viewControllers) { if ([loginVC isKindOfClass:NSClassFromString(@"LoginViewController")]) { return; } } NSLog(@"%@",(APPLICATION.window.rootViewController.presentedViewController)); LoginViewController *loginVC = [[LoginViewController alloc]init]; [APPLICATION.window.rootViewController presentViewController:loginVC animated:YES completion:^{}]; } - (void)pushViewController{ { id viewController = [[NSClassFromString(self.currentIdentifier) alloc]init]; if ([self.originViewController isKindOfClass:[UINavigationController class]]) { [(UINavigationController*)self.originViewController pushViewController:viewController animated:YES]; }else{ [self.originViewController.navigationController pushViewController:viewController animated:YES]; } } } @end
5.2枚举值声明改为
typedef enum JumpType{ ROUTE_MANAGER= 0, }MYJumpType;
5.3三个按钮的点击事件改为
//三个按钮的点击事件 - (void)btnClicked:(UIButton *)btnn{ if (btnn.tag == 0) { [RouteManager pushViewControllerWithOriginViewController:self loginFlag:@"Y" identifier:@"ZhuanZhangViewController" otherParameters:nil]; }else if(btnn.tag == 1){ [RouteManager pushViewControllerWithOriginViewController:self loginFlag:@"Y" identifier:@"HuiKuanViewController" otherParameters:nil]; }else{ [RouteManager pushViewControllerWithOriginViewController:self loginFlag:@"Y" identifier:@"JieKuanViewController" otherParameters:nil]; } }
5.4登录按钮的事件
- (IBAction)loginBtnClicked:(id)sender { if (self.userName.text.length > 0 && self.passWord.text.length > 0) { APPLICATION.isLogin = YES; [self dismissViewControllerAnimated:YES completion:^{ if(APPLICATION.jumpType == ROUTE_MANAGER){ [[NSNotificationCenter defaultCenter] postNotificationName:@"ROUTE_MANAGER" object:nil ]; } }]; }else{ UIAlertView *alertView = [[UIAlertView alloc]initWithTitle:@"提示" message:@"输入有误" delegate:nil cancelButtonTitle:@"确定" otherButtonTitles:nil, nil]; [alertView show]; } }
k.o.
相关文章推荐
- IOS开发简单登录LoginViewController、注册RegisterViewController、UcenterViewController功能实现方法
- java servlet 几种页面跳转的方法,需要的朋友可以参考一下 在访问网页的过程中,页面自动刷新、跳转和重定向是经常用到的,这里就说说在Java中是如何实现这些功能的! 一、页面自动刷新
- IOS开发简单登录LoginViewController、注册RegisterViewController、UcenterViewController功能实现方法
- 盒子 收藏帖子 转移-实现向网页自动填写用户名密码并自动点击登录按钮 完成全自动凳录
- IOS开发简单登录LoginViewController、注册RegisterViewController、UcenterViewController功能实现方法
- iOS简单登录LoginViewController、注册RegisterViewController等功能实现方法
- 页面实现验证码功能,点击“注册”按钮后,无论是否完成注册,验证码都能够自动刷新
- 网站的下次自动登录功能的实现方法
- 完成用户数据的导出,生成文本文件Users.txt,实现点击按钮自动下载
- andriod———1.实现原生登录注册。 2.首页完成商品列表展示点击相对应的商品ID进入商品详情 3.商品详情页面展示数据,点击加入购物车进入购物车页面 4.购物车页面完成购物车编辑,删除,功能
- JavaScript实现自动消除按钮功能的方法
- 网站的下次自动登录功能的实现方法
- clipboard.js 实现 点击按钮复制粘贴兼容ios 安卓 pc浏览器 zclip复制插件需要Flash支持
- JS实现PC、Android、IOS端的点击按钮复制内容功能
- 实现点击单选按钮后面的文字说明自动选中相应单选按钮功能
- Android订票系统订票功能实现(特效点击按钮实现票数自动加减1)
- IOS 中关于自定义Cell 上的按钮 开关等点击事件的实现方法(代理)
- react点击按钮跳转到一个新的窗口的功能实现
- iOS 实现点击tabbar跳转登录页面
- 到达时间自动点击按钮弹出提示并跳转【JavaScript实现】