先说一下我的项目框架,tabbarcontroller控制4个导航控制器,4个导航控制器分别控制四个根视图,在这种前提下 ,我们的项目中很容易出现(我的)tabbaritem,点击需要登录才能进去,点击的时候需要判断需不需要登录,没有登录的情况下,肯定需要登录的,然后push出来登录界面,既然是push出来的界面点击左上角返回的时候最多只能返回到(我的界面),那么问题就来了 ,总不能一直在这里循环着不让用户去看其他页面吧,后来发现tabbarcontroller有代理方法
- (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController{
//这里我判断的是当前点击的tabBarItem的标题
if ([viewController.tabBarItem.title isEqualToString:@"我的"]) {
//如果用户ID存在的话,说明已登陆
if (是否登录的 判断) {
//跳到登录页面
LoginViewController *login = [[LoginViewController alloc] init];
//隐藏tabbar
// login.hidesBottomBarWhenPushed = YES;
[((UINavigationController *)tabBarController.selectedViewController) pushViewController:login animated:YES];
return NO;
}else{
return YES;
}
}
else
return YES;
}
通过上面的方法完美解决了点击(我的)需要登录的问题,然后问题又来了,我的里面有设置按钮,在设置里面点击退出登录,用户又回到登录界面了,但是这个登录时(我的)界面push出来了,所以在点击左上角返回的时候又会出现问题,所以就在loginController里面的左上角返回按钮方法里添加
- (void)popToHome{
[self.tabBarController setSelectedIndex:0];
[self.navigationController popViewControllerAnimated:NO];
}
这样点击返回的时候就可以返回首页,而且你在其它页面登录的时候,再回到(我的)界面就不会弹出需要登录界面的情况
多一点细心,多一点记录,多一点成功
网友评论