先說一下我的項目框架,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];
}
這樣點擊返回的時候就可以返回首頁,而且你在其它頁面登錄的時候,再回到(我的)界面就不會彈出需要登錄界面的情況
多一點細心,多一點記錄,多一點成功