2013-01-24 37 views
0

我想查看視圖控制器是否在導航堆棧上,並且我迷失在要做什麼的選項中。這裏的我想要做什麼:檢查NavigationStack是否包含視圖控制器錯誤

if ([((AppDelegate *)[UIApplication sharedApplication].delegate).frontViewController.navigationController.viewControllers containsObject:SGAddNewServerViewController]) { 
    <#statements#> 
} 

的問題是,我如何才能引用SGAddNewServerViewController,因爲我需要objectAtIndex...等以瞭解它的地址嗎? XCode給我一個不知道它是什麼的錯誤,他是對的。

任何想法如何獲得它的參考without知道它在NavigationStack上的確切地址?謝謝。

回答

1

看樣子你正在努力尋找基於其類視圖控制器的控制器。要做到這一點,試試這個:

AppDelegate *delegate = (AppDelegate *)[UIApplication sharedApplication].delegate; 
UINavigationController *nav = delegate.frontViewController.navigationController; 
for (UIViewController *controller in nav.viewControllers) { 
    if ([controller isKindOfClass:[SGAddNewServerViewController class]]) { 
     SGAddNewServerViewController *sgController = (SGAddNewServerViewController *)controller; 
     // do stuff 
    } 
} 

請注意,這不是一個好主意,鳥巢這麼多的方法/屬性調用成一行。它使閱讀和調試非常困難。

+0

同意!這是一個混亂的方法;)感謝您的幫助!它似乎在工作! –

1

可以遍歷所有控制器和檢查是否有型SGAddNewServerViewController

NSArray *viewControllers = ((AppDelegate *)[UIApplication sharedApplication].delegate).frontViewController.navigationController.viewControllers; 
for (UIViewController *controller in viewControllers) { 
    if ([controller isKindOfClass:[SGAddNewServerViewController class]]) { 
     //todo something 
    } 
} 
+0

謝謝!一個整潔而圓滑的方法,你在這裏 –