0

Meine App verfügt über vier Registerkarten, auf denen verschiedene Informationen angezeigt werden.Navigieren in einem anderen Bildschirm, wenn die Tableiste ausgewählt ist, wenn der Benutzer bereits in einer anderen Registerkarte angemeldet ist-iOS

In meinem zweiten Tab-View-Controller Ich habe eine Schaltfläche Namen als button1 in dieser button1 Aktion läßt i SignInViewController Bildschirm und in meinem dritten Tab-View-Controller ist loginViewController navigiert habe.

Hier Zweck der beiden SignInViewController und loginViewController Bildschirm ist das gleiche, d. H. Benutzer kann in der App in beiden ViewController angemeldet.

Hier ist, was ich will genau ist, wenn ich in SignInViewController angemeldet bin dann, wenn ich auf dem dritten TabBarItem-View-Controller tippen sollte zum nächsten Bildschirm von loginViewController das heißt direkt navigiert, auf den nächsten Bildschirm habe ich es als AccountViewController benannt. Ich habe unten Code in tabbarcontroller Klasse versucht, aber es funktioniert nicht.

Bitte helfen Sie mir dabei. Vielen Dank im Voraus.

- (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]; 

      } 
     } 
    } 
} 
+0

Ist es sonst Zustand geht? Hast du das überprüft? – Dhanunjaya

+0

ja es sonst Zustand wird i Bruchstellen gehalten, ich habe auch Codierung weise überprüft Schritt für Schritt gibt es kein Problem, aber in Simulator seine nicht die Navigation nicht .. – Sajida

+0

Sie meinen, wenn Sie auf der 3. Position aus Tabbar „tippen Wenn Benutzer bereits eingeloggt "AccountViewcontroller sollte gedrängt werden und in Ihrem Fall wird es nicht richtig geschoben? –

Antwort

0

1.Is Ihre loginViewController innerhalb UINavigationController eingebettet ist?

-Wenn nicht als einbetten innen UINavigationController

2.Create a Druck Segue aus loginViewController zu AccountViewController z.B. Segue-Kennung: segueLoginToAccount

3.Now wenn Benutzer klicken Sie auf 3. Tab-Leiste Element, einen Scheck in viewDidLoad auf loginViewController erstellen, um zu sehen, ob der Benutzer bereits angemeldet ist oder nicht hat:

-(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 
} 

Keine Notwendigkeit zu verwenden, tabBarController didSelectViewController: Methode.

0

Erste Sache - Wenn der Zweck beider Viewcontroller gleich ist, warum dann verschiedene View-Controller für beide Tasten? Sie sollten same viewcontroller für beide Fälle verwenden.

Zweite Sache, die Sie einige flag or status in NSUserDefaults speichern können, die Informationen über Benutzer enthält, ist eingeloggt oder nicht.

Dann legte nur if - else Bedingung auf die Schaltfläche klicken, wenn Benutzer in dann instantiate nächsten View-Controller angemeldet ist statt loginVC oder wenn Benutzer in dann loginVC nicht angemeldet ist, zeigen, dass es ist.

Update:

Wie Sie Kommentar gefragt, dass Sie das Klick die auf Tabbar wollen, dann sollten Sie subclass - UITabBarController and set it to your UITabBarController in iterface builder und in dieser Klasse Sie Delegatmethode implementieren müssen - didSelectItem und in dieser Methode Prüfung von userdefaults dass Benutzer eingeloggt oder nicht und setze den View Controller entsprechend!

Weitere Informationen finden Sie unter this SO post!

+0

Dank für die ur response.its nicht über Schaltfläche wollen now.I dieses Szenario, wenn TabBarItem – Sajida

+0

in Antwort mein Update überprüfen geklickt wird! – Lion

0

Sie müssen den dritten View-Controller in NavigationController einfügen. Dadurch wird der Navigationsstapel für den Controller aktiviert.

UIViewController * loginviewcontroller = [UIViewController alloc] init];

UINavigationController * navController = [[UINavigationController alloc] initWithRootViewController: loginviewcontroller];

Weisen Sie diesen navController in der Tableiste zu.

z:

NSMutableArray * viewControllersList = [[NSMutableArray alloc] init];

[viewControllersList addObject: NavController];

[TabBarController setTabBarControllers: viewControllersList];

Via Storyboard können Sie Navigation Controller wie diese

enter image description here

Hoffnung einbetten, das wird helfen.

+0

Vielen Dank Sagar für Ihre Antwort. 3rd View Controller bedeutet, wo ich muss? und wo muss ich diesen Code platzieren? – Sajida

+0

Aktualisierte Antwort mit einigen weiteren Details. –

+0

meinst du 3rd view controller bedeutet loginviewcontroller? – Sajida

Verwandte Themen