2014-04-09 15 views
7

Ich habe 3 Tabs in meinem UITabbarController, die ich in meinem Appdelegate erstellt habe.So deaktivieren/aktivieren Sie einen bestimmten UITabBar Artikel,

Wenn ich die App öffne, habe ich das ausgewählte TabbarItem zum dritten TabbarItem gemacht.

Der Benutzer kann nur die UITabBarItem bei Index 0, wählen, wenn er angemeldet ist.

ich alles versucht, den Benutzer vor gehen TabBarItem_0 zu beschränken, wenn er bei TabBarItem_2 ist. Aber nichts hat funktioniert. Ich benutzte

- (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController 
{ 

} 

Aber es funktioniert nicht, wie ich wünschte. Ich überprüfte den Stackoverflow und fand fast die gleiche Frage, wo ich diesen Delegierten fand. Aber das funktioniert nicht wie gewünscht. Ich googelte, konnte aber keine andere Lösung als stackoverflows finden, was diesmal nicht half.

Auf den Klick des deaktivierten TabBar Items, muss ich ein Popup anzeigen. Wie kann ich das auch umsetzen?

+1

Welchen Code haben Sie in diese Methode geschrieben, was Sie dort haben, tut eigentlich nichts und wird wahrscheinlich auch nicht kompilieren. – Fogmeister

Antwort

3

Sie können dies in Ihrem Code tun

- (void)viewDidLoad { 
    ... 
    [self checkLogin]; 
    ... 
} 

- (void)checkLogin { 
    if (!loggedIn) { 
     [[[[self.tabBarController tabBar]items]objectAtIndex:0]setEnabled:NO]; 
    } else { 
     [[[[self.tabBarController tabBar]items]objectAtIndex:0]setEnabled:YES]; 
    } 
} 

- (void)tapLogin { 
    // Do the login action 
} 

- (void)processLoginResult { 
    // Process the result of the login action 
    // If the result is success, set 'loggedIn = YES' 
    // Otherwise, set 'loggedIn = NO' 
    ... 
    [self checkLogin]; 
    ... 
} 
+0

Ok, es deaktiviert die Tab-Leiste, aber auf dem Click des deaktivierten TabBar-Items muss ich ein Pop-Up anzeigen. Wie kann ich das umsetzen? – Jasmeet

14

so etwas wie dies versuchen,

- (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController; 
{  
     if (tabBarController.selectedIndex == 0) { 
      if(isUserLoggedIn) 
       return YES; 
      else 
       return NO; 
     } 

     return YES; 
} 

Wenn dies nicht funktioniert, dann,

diese hinzufügen, nachdem Sie die Bar Bar schaffen, in App-Delegierter,

[[[[self.tabBarController tabBar]items]objectAtIndex:0]setEnabled:FALSE]; 

, wenn Sie in sie lügen wieder aktiviert

[[[[self.tabBarController tabBar]items]objectAtIndex:0]setEnabled:TRUE]; 
+0

funktioniert nicht wie gewünscht. Lassen Sie mich erklären, zum Beispiel bin ich bei tabitem_3 und ich muss tabitem_1 dann blockieren Dieser Delegat stoppt es nicht zum ersten Mal, mehr vorbei Wenn ich dieses tabitem_1 noch einmal anklicke, wird das deelgate nicht – Jasmeet

+0

genannt Ich aktualisierte die Antwort, versuch das neue aproach – rustylepord

+0

Werfen Sie einen Blick auf diese auch, http: //stackoverflow.com/questions/16786556/prevent-tabbar-from-changing-tab-at-specific-index-ios?rq = 1 – rustylepord

1

Wenn Sie es mit dem Storyboard tun wollen, einfach das TabBarItem in der Ziel-View-Controller-Szene ausgewählt und deaktivieren Sie das Kontrollkästchen Aktiviert.

5

Dies ist, was ich in Swift tat 2.1:

self.tabBarController!.tabBar.items![0].enabled = false 
4

Schnell Hack, die ich verwenden, um ein Pop-up auf der aktuellen Ansicht, wenn sie auf einem Tab-Leiste Elemente angezapft zu präsentieren.

Implementieren Sie in Ihrer TabBarViewController-Klasse die UITabBarControllerDelegate und vergessen Sie nicht, self.delegate = self festzulegen.

Nach diesem

func tabBarController(tabBarController: UITabBarController, shouldSelectViewController viewController: UIViewController) -> Bool { 
    if viewController.title == "Unique_title" //set an unique title for the view controller in storyboard or the view controller class. 
    { 
     performSegueWithIdentifier("YourModalViewIdentifier", sender: nil) 
     return false 
    } else { 
     return true 
    } 
} 

, dass Sie eine modale Ansicht angezeigt werden sollen helfen, wenn Tippen auf den uitabbaritem empfangen wird. Ich weiß, dass die Verwendung von Titel als eindeutiger Bezeichner eine schlechte Übung ist, aber nur eine schnelle Lösung, um das zu erreichen, was Sie wollen.

Hoffe, dass hilft.

Verwandte Themen