2010-04-10 76 views
0

Ola Folks,迭代'Active'視圖控制器

在iPhone應用程序中,我使用addSubView:SomeViewController.view方法顯示不同的視圖。

我希望至少能夠記錄正在顯示的視圖層次結構中的視圖控制器。我寧願能夠獲得特定視圖控制器的句柄。

我知道如何迭代視圖,我只是看不到如何訪問這些視圖的視圖控制器。我正在尋找的東西,會給我對UINavigationController :: ViewControllers所做的視圖控制器的訪問類型。

我以爲我可以逃脫:

for (UIViewController* oVC in [self.view subviews])

但這沒有達到預期效果。

如果有人有辦法做到這一點,請與我分享。

-isdi-

+0

只要有用,我想知道在一系列AddSubview調用之後堆棧上的viewcontrollers是什麼。在這種特殊情況下,我想訪問其他四個視圖控制器下方的特定視圖控制器。我會很高興地向在發佈後不到兩分鐘的時候降級這個問題的人說。 – ISDi 2010-04-10 22:52:50

回答

1

視圖不保留對視圖控制器的引用(或瞭解一般視圖控制器的任何東西),所以你必須持續跟蹤繪製自己。如果你把所有的視圖控制器的陣列中的viewControllers,你可以這樣做:

- (UIViewController *) viewControllerForView:(UIView *)view { 
    for (UIViewController *viewController in viewControllers) 
     if (viewController.view == view) 
      return viewController; 
    return nil; 
} 
+0

奧拉湯姆。蕩。我希望在嘗試不同的方法半天后情況並非如此。感謝你的回答,我將在RootViewController中實現某種跟蹤機制。 – ISDi 2010-04-10 23:18:18

0

的觀點與擁有它是由具有設置爲視圖控制器視圖控制器交互的標準方式代表或視圖的行動目標。該視圖旨在不具有關於委託或操作目標的任何細節。

如果您已經實現了自己的視圖,只需添加一個成員來保存對視圖控制器的引用。或者爲視圖採用一個委託模型,以便委託的類別無關緊要。

如果您將視圖看作一個堆棧,並且希望沿着一側維護一堆視圖控制器,類似於UINavigationController爲您所做的操作,則必須手動執行此操作。通過調用[myViewControllerArray addObject:viewController]將addSubview:viewController.view的每次調用聯繫起來,並在從視圖層次結構中刪除視圖時,從該數組中移除viewController。

+0

Hello Drawnonward, 我沒有想過將ViewController設置爲委託。我喜歡這個想法。感謝名單。如果我能給你一點或什麼,我會的。 – ISDi 2010-04-11 13:50:15