簡體   English   中英

用戶已經登錄后如何處理選項卡視圖控制器中的登錄窗口

[英]how to handle login window in tab view controller when user is already logged in

我有一個有5個標簽的應用程序。

我有第三個選項卡作為“登錄”。 在這里,我稱為LoginViewController。

我想做的是,如果用戶已經登錄,我想顯示用戶MyAccountViewController而不是LoginViewController。

為此,我在下面使用。

-(void) viewDidAppear:(BOOL)animated {
    if ([[[NSUserDefaults standardUserDefaults] valueForKey:@"isLoggedIn"] isEqualToString:@"yes"]) {
        MyAccountViewController *secondView = [self.storyboard instantiateViewControllerWithIdentifier:@"MyAccount"];
        [self.navigationController pushViewController:secondView animated:NO];
    }
}

但是,調用DidAppear為時已晚。

另外,如果我雙擊“登錄”選項卡,它會先顯示“登錄”,並在經過一段時間延遲后顯示“我的帳戶”。

我想要的是,如果我已登錄,MyAccount將是root,而未登錄時Login將是root。

任何想法如何做到這一點?


編輯1

我嘗試如下,但給出了BAD_EXCESS

MyAccountViewController *tabViewC22 = [self.storyboard instantiateViewControllerWithIdentifier:@"MyAccount"];

MainViewController *tabViewC0 = [self.storyboard instantiateViewControllerWithIdentifier:@"Main"];
AboutUsViewController *tabViewC1 = [self.storyboard instantiateViewControllerWithIdentifier:@"AboutUs"];
LoginViewController *tabViewC21 = [self.storyboard instantiateViewControllerWithIdentifier:@"Login"];
LocationViewController *tabViewC3 = [self.storyboard instantiateViewControllerWithIdentifier:@"Location"];
AboutUsViewController *tabViewC4 = [self.storyboard instantiateViewControllerWithIdentifier:@"AboutUs"];


if ([[[NSUserDefaults standardUserDefaults] valueForKey:@"isLoggedIn"] isEqualToString:@"yes"])
{
    myViewControllers = [[NSArray alloc] initWithObjects:tabViewC0, tabViewC1, tabViewC22,tabViewC3,tabViewC4, nil];
}
else
{
    myViewControllers = [[NSArray alloc] initWithObjects:tabViewC0, tabViewC1, tabViewC21,tabViewC3,tabViewC4, nil];
}

//set the view controllers for the tab bar controller
[self.tabBarController setViewControllers:myViewControllers];

在初始化標簽欄視圖控制器項時進行檢查

 NSArray *myViewControllers = nil;

 if ([[[NSUserDefaults standardUserDefaults] valueForKey:@"isLoggedIn"] isEqualToString:@"yes"])
 {

   myViewControllers = [[NSArray alloc] initWithObjects:
                                   self.myAccountViewController,
                                   self.secondViewController, nil];
 }       
 else
 {
   myViewControllers = [[NSArray alloc] initWithObjects:
                                   self.loginViewController,
                                   self.secondViewController, nil];

 }  

//set the view controllers for the tab bar controller
[self.tabBarController setViewControllers:myViewControllers];

我認為您使用的方式不正確,但不是很錯誤,但是如果發現登錄,我發現有點不對勁的是按“ MyAccountViewController”,這很明顯,這意味着用戶不會從中注銷該應用程序是如此頻繁。

自4個月以來,我已經登錄了facebook,直到現在我還沒有注銷。 如果用戶未登錄,則可以推送或顯示登錄視圖控制器。

因此,在每種情況下,MyAccount都是您的第三個視圖控制器,但是在viewWillAppear中進行檢查將糾正您的問題。

嘗試設置[tabbarController setSelectedIndex:2];

我想傳達的內容有點冗長,所以我無法對此發表評論

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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