![](/img/trans.png)
[英]swift ios9 : if tab already selected, switch the current tab to another when clicking on it
[英]Navigating another screen when tabbar selected when user already logged in another tab-iOS
我的應用程序有四個選項卡,顯示不同的信息。
在我的第二個選項卡視圖控制器我有一個按鈕,可以將其命名為button1
在button1
動作我已經瀏覽到SignInViewController
屏幕,並在我的第三個標簽視圖控制器是loginViewController
。
這里的SignInViewController
和loginViewController
屏幕的目的是相同的,即,用戶可以在兩個ViewController的應用程序中登錄。
這就是我想要的,如果我登錄了SignInViewController
那么每當我點擊第三個TabBarItem
View Controller時,都應該直接導航到loginViewController
下一個屏幕,即,在下一個屏幕中,我將其命名為AccountViewController
。 我已經嘗試過以下tabbarcontroller
類中的代碼,但是它不起作用。
請幫我。 提前致謝。
- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController
{
if (tabBarController.selectedIndex == 2){
{
if (![[[NSUserDefaults standardUserDefaults]objectForKey:@"SigninStatus"] isEqualToString:@"SigninSuccess"]){
UIStoryboard *story = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
LoginViewController *logInVc = [story instantiateViewControllerWithIdentifier:@"LoginViewController"];
[self.navigationController pushViewController:logInVc animated:YES];
}
else
{
UIStoryboard *story = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
AccountViewController *accountVc = [story instantiateViewControllerWithIdentifier:@"AccountViewController"];
[self.navigationController pushViewController:accountVc animated:YES];
}
}
}
}
1.您的loginViewController
是否嵌入在UINavigationController
嗎?
-如果不是將其嵌入UINavigationController
2.創建從loginViewController
到AccountViewController
的推送Segue ,例如segue標識符: segueLoginToAccount
3.現在,當用戶單擊第三個選項卡欄項時,在loginViewController
viewDidLoad
創建一個檢查,以查看用戶是否已經登錄:
-(void)viewDidLoad {
[super viewDidLoad];
if ([[[NSUserDefaults standardUserDefaults]objectForKey:@"SigninStatus"] isEqualToString:@"SigninSuccess"]) {
//already logged in, push to Account View
[self performSegueWithIdentifier:@"segueLoginToAccount" sender:nil];
}//else user will stay on Login View
}
無需使用tabBarController didSelectViewController:
方法。
第一件事-如果兩個viewcontroller的目的相同,那么為什么兩個按鈕的視圖控制器不同? 在兩種情況下,您都應使用same viewcontroller
。
第二件事,您可以在NSUserDefaults
中存儲一些flag or status
,這些flag or status
包含有關用戶是否登錄的信息。
然后只需將if - else
條件置於按鈕單擊上即可,如果用戶已登錄,則instantiate
下一個視圖控制器而不是loginVC
或者如果用戶未登錄,則顯示loginVC
。
更新:
如在評論中要求在選項卡上單擊時要它那樣,則應該subclass - UITabBarController and set it to your UITabBarController in iterface builder
並且在該類中,您需要實現委托方法didSelectItem
並在此方法中從userdefaults檢查是否記錄了用戶是否安裝,並相應地設置視圖控制器!
請參閱此SO帖子以獲取更多詳細信息!
您需要將第3個視圖控制器放入NavigationController中。 這將使導航堆棧可供控制器繼續使用。
UIViewController * loginviewcontroller = [UIViewController alloc] init];
UINavigationController * navController = [[UINavigationController alloc] initWithRootViewController:loginviewcontroller];
在Tabbar中分配此navController。
例如:
NSMutableArray * viewControllersList = [[NSMutableArray alloc] init];
[viewControllersList addObject:navController];
[tabBarController setTabBarControllers:viewControllersList];
通過情節提要,您可以像這樣嵌入導航控制器
希望這會有所幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.