簡體   English   中英

如何迭代應用程序上的所有UIViewControllers

[英]How to iterate all the UIViewControllers on the app

我有一個這種結構的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(新聞列表視圖控制器)?

像這樣以代碼方式訪問它們:

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);
}

如果您使用的是iOS 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:

對於iOS 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。 如果你有任何..根視圖控制器再次啟動它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM