首页 > 移动开发 > iOS 自动登录,登录过程中一直显示加载页

iOS 自动登录,登录过程中一直显示加载页

iOS开发中 如果客户端做的人性化一点肯定会考虑自动登录

其实原理很简单,就是再首次登录成功之后将用户名和密码存入userdefault 下次登录的时候判断usedefault中有没有存储用户名密码,如果有的话就绕过登录界面直接登录

但是在做的过程中遇到了一个问题 现在做一整理,供大家学习,指正

一般实现自动登录都是在加载页中去实现,

但是登录一般都需要与服务器通信,是异步的,而加载页在主线程中,这样就无法控制加载页在登录完成(也就是服务器返回信息之后)之后再消失

我遇到的问题就是登录还没有完成,加载页已经完成。就会跳出一个空白页面,等自动登录完成之后才会跳转首页

解决办法就是,自己做一个viewControl 界面和加载页一模一样,一般情况下加载页都是一张图片比如微信加载页面就是

我们自己见里的 viewcontroller 只需要设置一个全屏图片,讲加载页图片放上去。

然后再appdelegate 中判断 如果是自动登录 就直接将

rootViewController

设置为我们自己新建的viewcontroller

 然后再登录完成之后做跳转就行

上代码

首先是我自己新建的viewcontroller  只需要加载一张图片即可

[objc]

  1. @implementation ViewController  
  2.   
  3. - (void)viewDidLoad {  
  4.     [super viewDidLoad];  
  5.     // Do any additional setup after loading the view, typically from a nib.  
  6.       
  7.     UIImageView *imageView=[[UIImageView alloc]initWithFrame:SCREEN_FRAME];  
  8.     imageView.image=[UIImage imageNamed:@"HelpSecond"];  
  9.     [self.view addSubview:imageView];  
  10.   
  11. }  
  12. - (void)didReceiveMemoryWarning {  
  13.     [super didReceiveMemoryWarning];  
  14.     // Dispose of any resources that can be recreated.  
  15. }  
  16.   
  17. @end  



第一次登录成功之后  将用户信息存入

[objc]

  1. NSUserDefaults *userD=[NSUserDefaults standardUserDefaults];  
  2.    [userD setValue:loginUserinfo forKey:@"loginuserinfo"];  


我的做法是将用户名 密码(md5加密过的,这样可以直接拉过来用) 存入字典,然后再将字典存入userdefault

下来在appdelegate 中判断是否usedefault中有用户名 密码 有的话 开始自动登录

[objc]

  1. NSUserDefaults *userD=[NSUserDefaults standardUserDefaults];  

 

[objc]

  1. NSDictionary *loginUserinfoDic=[userD valueForKey:@"loginuserinfo"];  
  2.          
  3.            if (loginUserinfoDic!=NULL) {  
  4.                  
  5.                [userD setValue:@"autologin" forKey:@"isautologin"];  
  6.                ViewController *vc=[[ViewController alloc]init];  
  7.                _window.rootViewController=vc;  
  8.                  
  9.                LoginViewController *loginVC=[[LoginViewController alloc]init];  
  10.                [loginVC login:loginUserinfoDic];  
  11.            }  



判断如果是 自动登录  首先讲 rootviewcontroller 设置为我们自己创建的viewcontroller

然后再调用自动登录方法

在自动登录完成之后重新设置rootviewcontreler即可

[objc]

  1. -(void)loginSuccess  
  2. {  
  3.       
  4.     HomeViewController *homeVC=[[HomeViewController alloc]init];  
  5.     ExploreViewController *exploreVC=[[ExploreViewController alloc]init];  
  6.     EnjoyViewController *enjoyVC=[[EnjoyViewController alloc]init];  
  7.     UserInfoViewController *userInfoVC=[[UserInfoViewController alloc]init];  
  8.       
  9.     UITabBarController *tabBarC=[[UITabBarController alloc]init];  
  10.     tabBarC.viewControllers=@[homeVC,enjoyVC,exploreVC,userInfoVC];  
  11.     //注意默认情况下UITabBarController在加载子视图时是懒加载的,所以这里调用一次contactController,否则在第一次展示时只有第一个控制器tab图标,contactController的tab图标不会显示  
  12.     for (UIViewController *controller in tabBarC.viewControllers) {  
  13.         UIViewController *view= controller.view;  
  14.     }  
  15.     [UIApplication sharedApplication].keyWindow.rootViewController=tabBarC;  
  16.   
  17. }  

本文固定链接: http://www.devba.com/index.php/archives/6286.html | 开发吧

报歉!评论已关闭.