2011-10-18 5 views
8

पर सभी UIViewControllers पुनरावृत्ति करने के लिए मैं इस संरचना के साथ एक xib है:कैसे एप्लिकेशन

- Tab Bar Controller 
-- Tab Bar 
-- NavigationController 
--- Navigation Bar 
--- News List View Controller 
---- Navigation Item 
--- Tab Bar Item 

-- NavigationController 
--- Navigation Bar 
--- News List View Controller 
---- Navigation Item 
--- Tab Bar Item 
-- NavigationController 
--- Navigation Bar 
--- News List View Controller 
---- Navigation Item 
--- Tab Bar Item 
[...] 

मैं प्रत्येक चरण में प्रत्येक UIViewController (समाचार सूची दृश्य नियंत्रक) लेने के लिए एक पाश कैसे कोड कर सकते हैं?

उत्तर

8

पहुँच उन्हें इस तरह codewise:

NSArray * controllerArray = [[self navigationController] viewControllers]; 

for (UIViewController *controller in controllerArray){ 
    //Code here.. e.g. print their titles to see the array setup; 
    NSLog(@"%@",controller.title); 
} 
+0

धन्यवाद। अंततः मैं इसे प्रतिनिधि फ़ाइल में नेविगेशन नियंत्रकों की एक कस्टम सरणी बनाने का हल करता हूं, शायद यह बेहतर तरीका नहीं है लेकिन यह काम करता है। – Jimmy

4

आप आईओएस 5 उपयोग कर रहे हैं आप कुछ इस तरह कर सकते हैं:

- (void) processViewController: (UIViewController *) viewController { 
    //do something with viewcontroller here 
    NSLog(@"I'm viewcontroller %@", viewController); 
    for (UIViewController *childVC in viewController.childViewControllers) { 
     [self processViewController:childVC]; 
    } 
} 

और साथ पूरे मज़ा शुरू:

[self processViewController:myRootViewController]; //would be the tabbarcontroller in your case 

संपादित करें: मुझे यकीन नहीं है कि आप यहां क्या हासिल करना चाहते हैं, लेकिन यह कोड पूरे पेड़ से गुज़रने के लिए है।

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

इस तरह आईओएस 4 कोशिश कुछ के लिए:

- (void) processViewController: (UIViewController *) viewController { 
    //do something with viewcontroller here 
    NSLog(@"I'm viewcontroller %@", viewController); 

    if ([viewController isKindOfClass:[UITabBarController class]]) { 
     for (UIViewController *childVC in ((UITabBarController *)viewController).viewControllers) { 
      [self processViewController:childVC]; 
     } 
    } 
    else if ([viewController isKindOfClass:[UINavigationController class]]) { 
     for (UIViewController *childVC in ((UINavigationController *)viewController).viewControllers) { 
      [self processViewController:childVC]; 
     } 
    } 
} 

ध्यान दें: आप जो subviewcontrollers है किसी भी कस्टम ViewController जोड़ने की जरूरत होगी। यदि आपके पास कोई है .. रूट व्यू कंट्रोलर इसे फिर से शुरू कर देता है।

+0

धन्यवाद, लेकिन मैं इस परियोजना में आईओएस 5 का उपयोग नहीं कर सकता:/ – Jimmy

+0

सहायता के लिए धन्यवाद। अंततः मैं इसे नेविगेशनबार की एक कस्टम सरणी के साथ हल करता हूं, क्योंकि मैं एक पुनरावर्ती विधि का उपयोग नहीं कर सकता। शायद बेहतर तरीका नहीं है लेकिन यह काम करता है। – Jimmy

+0

यह वर्तमान दृश्य नियंत्रक द्वारा जोड़े गए मोडल व्यू कंट्रोलर का पता नहीं लगाता है: एनिमेटेड: – Lukasz

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