2011-08-16 123 views
5

我有一个标签栏控制器,每个标签由导航控制器组成。如何从标签栏控制器访问View Controller?

如何访问选项卡中导航控制器中的特定视图控制器,以便我可以访问特定于视图控制器的属性?

我尝试下面的代码:

//Get the navigation controller of the 3rd tab 
self.tabController.selectedViewController 
= [self.tabController.viewControllers objectAtIndex:2]; 

//Attempt to retrieve the viewcontroller I want from the tabcontroller 
SomeViewController *svc = (SomeViewController *)self.tabController.selectedViewController; 

//Attempting to access a BOOLEAN property in svc viewcontroller 
svc.someProperty = YES; 

上面的代码失败,因为它似乎“self.tabController.selectedViewController”返回我的导航控制器。如何扩展代码以便我可以访问“svc.someProperty”?

回答

1

由于视图控制器是返回的UINavigationController(SVC)的子视图,因此您可以将它发送给以下方法[svc topViewController];。这应该返回你的视图控制器,然后你应该能够访问该属性。

4

如果self.tabController.selectedViewController是你的导航视图控制器,那么你可以使用访问当前可见的控制器:使用

visibleViewController

和顶视图控制器:

topViewController

如果这样做不允许您访问SomeViewController,您可以遍历导航控制器堆栈上推送的控制器列表:

viewControllers

+0

塞尔吉奥,我用你的答案,但我得到'0x0'所有这些值,即使我看selectedViewController。 [什么可能导致它?](http://stackoverflow.com/q/7433189/266252) –