APP应用中登录场景使用介绍

目前应用基本都有登录选项,就是登录的时机不同而已。主流的两种登录场景:第一种是一进入就判断你是否登录(就是你不先登录你就不能用);第二种是当你点击某一项或者使用某个功能时才提醒你登录。
第一种:加载完LaunchImage后直接加载登录界面,登录成功后显示主界面。(PS:这种情况可能会遇到上线被拒,因为你应用里面有部分直接展示的内容不需要关联用户)
做法是切换keyWindow的rootViewController,通常用通知、代理以及获取单例的UIApplication利用AppDelegate这些方法。个人感觉利用UIApplication最为方便,下面就是这种做法介绍
启动应用在- (BOOL)application:(UIApplication )application didFinishLaunchingWithOptions:(NSDictionary )launchOptions里面进行用户是否登录判断,这里的登录状态保存在NSUserDefaults中

BOOL loginState = [[NSUserDefaults standardUserDefaults] boolForKey:@"loginState"];
    loginState ? [self changeAPPRootViewControllerToTabbar]:[self changeAPPRootViewControllerToLogin];

设置登录界面为应用的主界面

#pragma mark - 切换为登录界面
- (void)changeAPPRootViewControllerToLogin {
    LNLoginViewController *loginVC = [[LNLoginViewController alloc] init];
    loginVC.title = @"Login";
//    loginVC.delegate = self;
    UINavigationController *navi = [[UINavigationController alloc] initWithRootViewController:loginVC];
    self.window.rootViewController = navi;
}

设置业务界面

#pragma mark - 切换为显示tabbar界面
- (void)changeAPPRootViewControllerToTabbar {
    LNTabbarController *tabbarController = [[LNTabbarController alloc] init];
    self.window.rootViewController = tabbarController;
}

注意:这两个方法一定要在AppDelegate.h中声明。
好的,接下来就是处理登录和退出操作了。
登录成功切换为业务界面

- (void)login {
    [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"loginState"];
    [[NSUserDefaults standardUserDefaults] synchronize];
//    [self.delegate changeAPPRootViewControllerToTabbar];

    if ([[[UIApplication sharedApplication] delegate] respondsToSelector:@selector(changeAPPRootViewControllerToTabbar)]) {
        [[UIApplication sharedApplication].delegate performSelector:@selector(changeAPPRootViewControllerToTabbar)];
    }

}

退出成功切换为登录界面

- (void)logout {
    [[NSUserDefaults standardUserDefaults] setBool:NO forKey:@"loginState"];
    [[NSUserDefaults standardUserDefaults] synchronize];

    if ([[[UIApplication sharedApplication] delegate] respondsToSelector:@selector(changeAPPRootViewControllerToLogin)]) {
        [[UIApplication sharedApplication].delegate performSelector:@selector(changeAPPRootViewControllerToLogin)];
    }
}

大致思路就是这样的,只要在添加登录成功或退出成功的相应处理就好了。
第二种:主界面以UITabbarController或者UINavigationController形式展示,当点击tabbar的某一项时present出来登录界面,或者使用某一项功能时push出来登录界面。
这种做法主要是利用UITabBarControllerDelegate中的- (BOOL)tabBarController:(UITabBarController )tabBarController shouldSelectViewController:(UIViewController )viewController这个代理方法,我们可以根据需求去设定按个tabbarItem对应的界面显示需要登录。

- (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController {
    self.clickedTag = viewController.tabBarItem.tag;
    if (viewController.tabBarItem.tag == 1) {

         BOOL loginState = [[NSUserDefaults standardUserDefaults] boolForKey:@"loginState"];
        loginState ?  : [self presentLoginController];
        return loginState;
    }
    return YES;
}

登录成功后利用selectedIndex改变tabbarController当前显示的界面。

self.selectedIndex = self.clickedTag;

你可能感兴趣的:(iOS梳理)