2011-03-09 13 views
5

क्या कोई मुझे बता सकता है कि मैं यह निर्धारित कर सकता हूं कि कौन सा टैबबार इंडेक्स व्यू कंट्रोलर है।यह निर्धारित करने के लिए कि कौन सा टैबबार इंडेक्स मेरा व्यू कंट्रोलर

सरलीकृत करने के लिए - मैं इस समय एक टैबबार पर जा सकता हूं, इस समय अपनी अनुक्रमणिका हार्डकोडिंग कर सकता हूं।

self.tabBarController.selectedIndex = 3; 

हालांकि, उपयोगकर्ता टैब बार आइटम को अनुकूलित करना चाहिए, इसकी संभावना है ViewController नंबर 3 पर नहीं है एक है कि उपयोगकर्ता चाहते हैं के रूप में यह स्थानांतरित कर दिया गया है। मैं यह कैसे निर्धारित कर सकता हूं कि यह कहां स्थानांतरित हो गया है, इसलिए मैं सही का चयन कर सकता हूं।

कोई मदद कृपया।

धन्यवाद,

ली

उत्तर

0

ठीक है, तो मैं जवाब सफलतापूर्वक में से किसी से किसी के साथ कोई किस्मत थी - लेकिन मैंने किया तरह यह इतना सोचा कि मैं यह समझाएगा कि मैंने यह कैसे किया है कि कोई ऐसा व्यक्ति है जो मैंने जो किया वह करने का प्रयास कर रहा है।

प्रत्येक tabBarItem मेरी टैब बार नियंत्रक पर एक टैग है कि 0 से आरंभ होगी और 8 के साथ समाप्त हुआ कहना (आईबी भी किया जा सकता है)

TabBarController आदि के लिए यकीन है कि प्रतिनिधि पूरी तरह तैयार है बनाने के लिए और निम्नलिखित inplement सौंपा गया था प्रतिनिधि विधि:

- (void)tabBarController:(UITabBarController *)theTabBarController didEndCustomizingViewControllers:(NSArray *)viewControllers changed:(BOOL)changed { 

NSInteger count = self.tabBarController.viewControllers.count; 
NSMutableArray *tabOrderArray = [[NSMutableArray alloc] initWithCapacity:count]; 


for (UINavigationController *viewController in viewControllers) 
{ 
    NSInteger tag = viewController.tabBarItem.tag; 
    [tabOrderArray addObject:[NSNumber numberWithInteger:tag]]; 
} 

[prefs setObject:tabOrderArray forKey:@"tabOrder"]; 
[prefs synchronize]; // optional 
[tabOrderArray release]; 

}

(ध्यान दें मैं पाश के लिए इसलिए है कि मेरे ऐप में ViewControllers के ontop navControllers का उपयोग करें)

तो अब मैं क्या बस एक जांच किया गया था ऐसा करने में सक्षम था अगर वहाँ एक नया टैब बार आदेश

NSArray * tabBarOrder = [prefs objectForKey:@"tabOrder"]; 


if(tabBarOrder) { ... } 

अगर वहाँ एक टैब बार आदेश मैं कुलपति मैं चाहता था के सूचकांक मिल सकता था के साथ वरीयता में एक सरणी था '[tabBarOrder indexOfObjectIdenticalTo: [NSNumber संख्या WithInt: theViewsTagImAfter]] के साथ;

और यदि प्रीफ़ में कोई सरणी नहीं थी तो आप सुरक्षित रूप से मान सकते हैं कि यह स्थानांतरित नहीं हुआ है और कहां है।

**

किसी भी एक को नष्ट करने के मैं कैसे किया है यह आप महसूस करना चाहिए कि आप एक आकर्षक तरीके से इस पूरा किया जा सकता था संकोच न करें। हालांकि, यह काम करता है और अन्य सुझाव नहीं थे।

15

self.tabBarController.selectedViewController संपत्ति का उपयोग करें।

अद्यतन: एक विशिष्ट ViewController के सूचकांक प्राप्त करने के लिए, का उपयोग करें:

NSUInteger index = [self.tabBarController.viewControllers indexOfObjectIdenticalTo:specificViewController]; 
+0

कोई खेद नहीं है, आप गलत समझते हैं या मेरा प्रश्न भ्रामक है - मैं वर्तमान इंडेक्स की तलाश नहीं कर रहा हूं, मैं एक विशेष दृश्य नियंत्रक को कूदने के लिए देख रहा हूं, जिसमें वर्तमान में मुझे पता नहीं है कि यह कौन सा अनुक्रमणिका है इसे बदला जाना चाहिए। कोई स्पष्ट? धन्यवाद और क्षमा करें। – theiOSDude

+0

'चुनीViewController' प्रॉपर्टी एक इंडेक्स नहीं लौटाती है लेकिन 'UIViewController' उदाहरण है। हो सकता है कि मैं अभी भी समझ में नहीं आता कि आप क्या देख रहे हैं ... –

+0

क्षमा करें, दाएं - आपने जो सुझाव दिया है वह अच्छा है, यह मुझे एक दृश्य नियंत्रक का चयन करने की अनुमति देता है, इसलिए हल किया गया है, हालांकि, मुझे इसी टैब का चयन करने की आवश्यकता है - इसलिए, सूचकांक .. – theiOSDude

1

आप UITabBar में नियंत्रकों की सूची प्राप्त और सूचक मूल्य से तुलना कर सकते हैं। उदाहरण के लिए, एक दृश्य नियंत्रक एक UITabBar में है कि पता लगा सकते हैं तो वह ऐसा स्थान है:

int loc = 0; 
for (UIViewController *vc in [self.tabBarController viewControllers]){ 
    if (vc == self.navigationController || vc == self){ 
     break; 
    } 
    loc++; 
} 
if (loc == [[self.tabBarController viewControllers] count]) 
    NSLog(@"Could not find me!"); 
else 
    NSLog(@"Im in tab:% d",loc); 
संबंधित मुद्दे