簡體   English   中英

當用戶已經登錄另一個選項卡時,在選擇選項卡時導航另一個屏幕-iOS

[英]Navigating another screen when tabbar selected when user already logged in another tab-iOS

我的應用程序有四個選項卡,顯示不同的信息。

在我的第二個選項卡視圖控制器我有一個按鈕,可以將其命名為button1button1動作我已經瀏覽到SignInViewController屏幕,並在我的第三個標簽視圖控制器是loginViewController

這里的SignInViewControllerloginViewController屏幕的目的是相同的,即,用戶可以在兩個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.創建從loginViewControllerAccountViewController推送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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM