2012-05-21 13 views
11

मैं आईओएस 5 स्टोरीबोर्ड का उपयोग करता हूं, और मेरा प्रारंभिक दृश्य नियंत्रक TabBarController है, & व्यू 2 & व्यू 3 & व्यू 4, तो, मैं व्यू 3 के व्यू कंट्रोलर को कैसे प्राप्त कर सकता हूं?मैं AppDelegate पर TabBarController से ViewController कैसे प्राप्त कर सकता हूं?

मैंने कोशिश की:

[[[[self.window.rootViewController navigationController] tabBarController] viewControllers] objectAtIndex:2]; 

लेकिन यह काम नहीं करता ...

उत्तर

30

आपने कहा था कि अपने प्रारंभिक (रूट) दृश्य नियंत्रक एक UITabBarController है, लेकिन आप एक साथ एक दृश्य नियंत्रक की बात कर रहे एक टैब बार नियंत्रक के साथ नेविगेशन नियंत्रक। क्या आप अपने व्यू कंट्रोलर पदानुक्रम में मिश्रित हो रहे हैं?

संपादित करें:

अगर आपके रूट दृश्य नियंत्रक वास्तव में सिर्फ एक टैब बार नियंत्रक है और तुम यहाँ 3 टैब प्राप्त करना चाहते हैं कोड है:

[[((UITabBarController *)self.window.rootViewController) viewControllers] objectAtIndex:2]; 
+0

'UIViewController' के लिए कोई दिखाई @interface वाणी चयनकर्ता 'दृश्य नियंत्रक' –

+2

हाँ, यह काम करता है। मैं इतना बेवकूफ हूँ। UITabBarController * tabBarController = (UITabBarController *) self.window.rootViewController; –

9
[self.tabBarController setSelectedIndex:2]; 
+2

सबसे कम न्यूनतम जवाब, जबकि टैबबार नियंत्रक प्राप्त करने का यह सबसे आसान और सबसे अच्छा तरीका है। UITabBarController UIViewController को एक श्रेणी जोड़ता है जो दृश्य में एक है, या यदि नहीं है तो एक UITabBarController देता है। –

+1

क्या किसी चयनित इंडेक्स पर ऑब्जेक्ट (कंट्रोलर देखें) प्राप्त करने का कोई तरीका है? –

7

इस तरह का प्रयास करें

किसी भी दृश्य नियंत्रक में

YourViewController *yourViewController= (YourViewController*) [self.tabBarController.viewControllers objectAtIndex:3]; 

यह आपके उस व्यू कंट्रोलर ऑब्जेक्ट को वापस लाता है। इसे अपने व्यू कंट्रोलर पर रखें और आप इसका उपयोग करने के लिए तैयार हैं। रन और जाओ

+0

इस उत्तर का स्विफ्ट 3 संस्करण क्या होगा? –

3
UIViewController *loginViewController=self.window.rootViewController; 

    UITabBarController *controller=loginViewController.tabBarControllerObj; 

    UIViewController *selectedController=controller.selectedViewController; 

यह आप से दृश्य नियंत्रक चयनित हो जाएगा।

सभी दृश्य नियंत्रक हो रही बस की जगह

NSArray *viewControllers = [controller viewControllers]; 
0

स्विफ्ट 4,0

let viewC = self?.tabBarController.viewControllers.first // will give single Navigation Controller on index 0 
let viewC = self?.tabBarController?.viewControllers// will give array of Navigation Controller 

इसके अलावा आप दर्शनीय ViewController जांच कर सकते हैं

if let nav = viewC as? UINavigationController { 
    if nav.visibleViewController is YourViewControllerName{ 
     // Do Code 
    } 
} 
संबंधित मुद्दे