5257人阅读
iOS(120)
iOS开发中 如果客户端做的人性化一点肯定会考虑自动登录
其实原理很简单,就是再首次登录成功之后将用户名和密码存入userdefault 下次登录的时候判断usedefault中有没有存储用户名密码,如果有的话就绕过登录界面直接登录
但是在做的过程中遇到了一个问题 现在做一整理,供大家学习,指正
一般实现自动登录都是在加载页中去实现,
但是登录一般都需要与服务器通信,是异步的,而加载页在主线程中,这样就无法控制加载页在登录完成(也就是服务器返回信息之后)之后再消失
我遇到的问题就是登录还没有完成,加载页已经完成。就会跳出一个空白页面,等自动登录完成之后才会跳转首页
解决办法就是,自己做一个viewControl 界面和加载页一模一样,一般情况下加载页都是一张图片比如微信加载页面就是
我们自己见里的 viewcontroller 只需要设置一个全屏图片,讲加载页图片放上去。
然后再appdelegate 中判断 如果是自动登录 就直接将
rootViewController
设置为我们自己新建的viewcontroller
&然后再登录完成之后做跳转就行
首先是我自己新建的viewcontroller &只需要加载一张图片即可
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
UIImageView *imageView=[[UIImageView alloc]initWithFrame:SCREEN_FRAME];
imageView.image=[UIImage imageNamed:@&HelpSecond&];
[self.view addSubview:imageView];
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
第一次登录成功之后 &将用户信息存入
NSUserDefaults *userD=[NSUserDefaults standardUserDefaults];
[userD setValue:loginUserinfo forKey:@&loginuserinfo&];
我的做法是将用户名 密码(md5加密过的,这样可以直接拉过来用) 存入字典,然后再将字典存入userdefault
下来在appdelegate 中判断是否usedefault中有用户名 密码 有的话 开始自动登录
NSUserDefaults *userD=[NSUserDefaults standardUserDefaults];
NSDictionary *loginUserinfoDic=[userD valueForKey:@&loginuserinfo&];
if (loginUserinfoDic!=NULL) {
[userD setValue:@&autologin& forKey:@&isautologin&];
ViewController *vc=[[ViewController alloc]init];
_window.rootViewController=
LoginViewController *loginVC=[[LoginViewController alloc]init];
[loginVC login:loginUserinfoDic];
判断如果是 自动登录 &首先讲 rootviewcontroller 设置为我们自己创建的viewcontroller
然后再调用自动登录方法&
在自动登录完成之后重新设置rootviewcontreler即可
-(void)loginSuccess
HomeViewController *homeVC=[[HomeViewController alloc]init];
ExploreViewController *exploreVC=[[ExploreViewController alloc]init];
EnjoyViewController *enjoyVC=[[EnjoyViewController alloc]init];
UserInfoViewController *userInfoVC=[[UserInfoViewController alloc]init];
UITabBarController *tabBarC=[[UITabBarController alloc]init];
tabBarC.viewControllers=@[homeVC,enjoyVC,exploreVC,userInfoVC];
//注意默认情况下UITabBarController在加载子视图时是懒加载的,所以这里调用一次contactController,否则在第一次展示时只有第一个控制器tab图标,contactController的tab图标不会显示
for (UIViewController *controller in tabBarC.viewControllers) {
UIViewController *view= controller.
[UIApplication sharedApplication].keyWindow.rootViewController=tabBarC;
ok &如果有问题欢迎加qq讨论
苹果开发群 : &欢迎加入 &欢迎讨论问题
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:803123次
积分:6451
积分:6451
排名:第3289名
原创:133篇
评论:102条
(1)(19)(3)(1)(7)(2)(9)(23)(25)(14)(19)(1)(1)(1)(1)(4)(3)(1)(1)(2)(4)