2016-03-30 12 views
5

जब कोई उपयोगकर्ता लॉग इन होता है या नहीं, तो मैं TabBar Item बदलना चाहता हूं।प्रोग्रामरिक रूप से टैबबार आइटम बदलते हैं?

उदाहरण के लिए: मेरे पास 5 अलग-अलग टैबबार आइटम हैं, सभी ने स्टोरीबोर्ड बनाया है।

अब जब उपयोगकर्ता के पास कोई खाता नहीं है तो मैं टैरबार को इंडेक्स 2 (या टैग == 2) के साथ बदलना चाहता हूं। मैं एक अलग rootViewController लोड करना चाहता हूँ। RootViewController पहले से ही मेरे TabBar का एक आइटम नहीं है, मैं एक पूरी तरह से अलग नियंत्रक लोड होगा।

ऐसा करने का सबसे अच्छा तरीका क्या है? मैं साधारण परिवर्तन के साथ आइकन कर सकते हैं:

self.tabBar.items![0].selectedImage = UIImage(named: "icon_cal_grey") 

लेकिन मैं कैसे rootViewController बदलने के लिए?

क्या मुझे इसे यहां करना चाहिए?

override func tabBar(tabBar: UITabBar, didSelectItem item: UITabBarItem) { 

    if item.tag == 1 { 
     // ? 
    } 

} 

या बीमार RootViewController के रूप में एक UINavigationController बनाना चाहिए, और यहाँ लोड RootViewController के रूप में "सही" ViewController?

उत्तर

3

चेक परिवर्तन उपयोगकर्ता के प्रवेश करता है, तो और उसके बाद दृश्य UITabBarController के नियंत्रकों को बदलें:

tabbarController.viewControllers?.replaceRange() 

इसके अलावा इस Set view controllers of UITabBarController in Swift मदद मिल सकती है

2

इस प्रयास करें:

self.tabBar.selectedIndex = 0 

यदि आप चाहते हैं की ViewController

+0

नहीं है, मैं केवल एक ViewController बदलना चाहते हैं न, मैं एक RootViewController (जो पहले से ही एक UITabBarItem नहीं है) – derdida

3

आपको दूसरे टैब गधे को प्रतिस्थापित करने की आवश्यकता है एक नए व्यू कंट्रोलर द्वारा व्यू कंट्रोलर पर आधारित। यहाँ नमूना कोड है, जो आपकी मदद कर सकता है:

NSMutableArray *viewControllers = [[NSMutableArray alloc] initWithArray:self.tabBarController.viewControllers]; 
UIViewController *newVC = [UIViewController new]; 
UINavigationController *newNav = [[UINavigationController alloc] initWithRootViewController:newVC]; 
[viewControllers replaceObjectAtIndex:1 withObject:newNav]; 
self.tabBarController.viewControllers = viewControllers 
+0

धन्यवाद बदलना चाहते हैं - लेकिन replaceObjectAtIndex स्विफ्ट में है नहीं उपलब्ध। केवल एक "replRange" है - क्या आप जानते हैं कि इसका उपयोग कैसे करें? – derdida

+0

@derdida: मैं xcode 7.2 का उपयोग कर रहा हूं और मुझे यह विधि मिली .. सरणी दें: NSMutableArray = NSMutableArray() array.replaceObjectAtIndex (1, ऑब्जेक्ट: Your_object) –

संबंधित मुद्दे