2012-04-19 14 views
5

मैंने स्टोरीबोर्ड के साथ अपना ऐप बनाया है और सभी दृश्य एक टैबबार नियंत्रक द्वारा प्रबंधित किए जाते हैं।स्टोरीबोर्ड-आधारित ऐप में UITabBarController में टैब अक्षम/सक्षम करें

तो लांच (मैं केवल आईपैड यूआई वर्तमान में काम कर रहा हूँ) यह ऐसा करता है पर:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) 
    { 
     UITabBarController *tabBarController = (UITabBarController *)self.window.rootViewController; 
     UISplitViewController *splitViewController = [tabBarController.viewControllers objectAtIndex:0]; 
     UINavigationController *navigationController = [splitViewController.viewControllers lastObject]; 
     splitViewController.delegate = (id)navigationController.topViewController; 

     UINavigationController *masterNavigationController = [splitViewController.viewControllers objectAtIndex:0]; 
     ProductionMasterViewController *controller = (ProductionMasterViewController *)masterNavigationController.topViewController; 
     controller.managedObjectContext = self.managedObjectContext; 
    } 
} 

मैं (ताकि उपयोगकर्ता इनपुट के आधार पर सक्षम या TabBarController में टैब निष्क्रिय करने में सक्षम होना चाहता हूँ , उदाहरण के लिए, दूसरे और तीसरे टैब तक पहुंचने के लिए पहले टैब में एक आइटम को चुना जाना चाहिए, जो डिफ़ॉल्ट रूप से अक्षम हैं)

मुझे यह स्पष्ट नहीं है कि टैब को कैसे एक्सेस किया जाए उन्हें सक्षम/अक्षम करें। मैं AppDelegate का एक उदाहरण बन जाएगा और उसके बाद

AppDelegate *d = (AppDelegate *)[[UIApplication sharedApplication] delegate]; 
UITabBarController *tabs = (UITabBarController *)[d.window rootViewController]; 
[[[[tabs tabBar] items] objectAtIndex:2] setEnabled:YES]; 
[[[[tabs tabBar] items] objectAtIndex:3] setEnabled:YES]; 
[[[[tabs tabBar] items] objectAtIndex:4] setEnabled:YES]; 

की तरह कुछ करना (यह थोड़े है जैसे कि यह काम करना चाहिए लगता है, लेकिन यह भी काफी सकल लगता है।)

उत्तर

4

आप एक स्टोरीबोर्ड आधारित एप्लिकेशन का उपयोग करके कर रहे हैं, मुझे लगता है कि आपके पास UITabBarController स्टोरीबोर्ड में रूट नियंत्रक के रूप में परिभाषित है। संयोग से, आप खिड़की से रूट व्यू कंट्रोलर तक चलने के बजाय पहचानकर्ता द्वारा इसे पुनर्प्राप्त भी कर सकते हैं।

कौन से टैब चुनने योग्य हैं, प्रतिबंधित करना UITabBarController (यानी UITabBarControllerDelegate) के प्रतिनिधि को सेट करके हासिल किया जाता है।

प्रतिनिधि में, आप इन दोनों तरीकों को लागू कर सकते हैं:

– tabBarController:shouldSelectViewController:

– tabBarController:didSelectViewController:

इसी तरह, आप सिर्फ पहली प्रतिबंधित करने के लिए, की जरूरत है (रोकना) चयन जब तक अपने कार्यप्रवाह तैयार है।

एक और तरीका, टैब बार नियंत्रक पर "व्यू कंट्रोलर" संपत्ति सेट करना है, हर बार एक मील का पत्थर पारित किया जाता है। प्रत्येक मील का पत्थर पर, आप इस संपत्ति में दृश्य नियंत्रकों की एक विस्तृत विस्तृत श्रृंखला सेट करते हैं, जो खुल जाएगा अतिरिक्त टैब आइटम का चयन।

स्विफ्ट 3

let arrayOfTabBarItems = tabBarController?.tabBar.items 

     if let barItems = arrayOfTabBarItems, barItems.count > 0 { 
      os_log("barItems.count is now ", barItems.count) 
      tabBarItem0 = barItems[0] 
      tabBarItem0.isEnabled = true 
      tabBarItem1 = barItems[1] 
      tabBarItem1.isEnabled = true 
      tabBarItem2 = barItems[2] 
      tabBarItem2.isEnabled = true 
      tabBarItem3 = barItems[3] 
      tabBarItem3.isEnabled = true 
      tabBarItem4 = barItems[4] 
      tabBarItem4.isEnabled = true 
     } 

इस ईए पर अपने viewWillAppear में इस्तेमाल किया जा सकता (समझ में आसानी के लिए विस्तार) सी टैब नियंत्रक। इसके खिलाफ अपने नियमों की जांच करें और तदनुसार प्रत्येक टैब को प्रतिबंधित करें। (अधिक संक्षिप्त विधि)

let arrayOfAllTabBarItems = tabBarController?.viewControllers 
    if let tabBarArray = arrayOfAllTabBarItems, tabBarArray.count > 0 { 
     for x in 0...tabBarArray.count-1 { 
      let tabBarItem = tabBarArray[x] 
      if tabBarItem.title != nil { 
       if tabBarItem.title == "Tab1" || tabBarItem.title == "MyTab" || tabBarItem.title == "Tab2Check" { 
        tabBarItem.tabBarItem.isEnabled = !(isMyRuleTrue!) 
       } 
      } 
     } 
    } 
संबंधित मुद्दे