2013-03-21 85 views
1

我用故事板来建立我的应用程序: enter image description here将数据传递到容器视图

而且我知道我可以使用类似通过从“第一个视图控制器”下一个控制器的数据:

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 
    if ([segue.identifier isEqualToString:@"some_segue"]) { 
     vc = segue.destinationViewController; 
     vc.data = @"data_i_want_to_pass"; 
    } 
} 

但现在,数据传递到“选项卡栏控制器”,而不是“发现表视图控制器”。有什么方法可以将数据从“First View Controller”传递到“Discover View Controller”?谢谢。

+0

当应用程序启动时,您想传递的数据是否可用?我问这个,因为你展示的所有控制器都将在启动时实例化。 – rdelmar 2013-03-21 05:59:33

+0

是的,我想通过“第一视图控制器”的参考。 – iForests 2013-03-21 08:41:52

回答

0

如果它的确定通过在应用程序启动的数据(因为这时候所有这些控制器将被实例化,并嵌入SEGUE会被调用),那么你可以将数据传递到标签栏控制器,并该控制器将不得不将其传递给你想要的那个。因此,您必须继承标签栏控制器的子类,并传递您在问题中显示的数据。然后在标签栏控制器,你可以把这样的事情在viewDidLoad中:

DiscoverViewController *dvc = [(UINavigationController *)self.viewControllers[0] topViewController]; 
dvc.propIWantToSet = self.propThatGotSet; 

这似乎并不可能的是,那你要传递的数据可立即启动 - 如果它是,那么你可以将它首先硬编码到DiscoverViewController中。在这种情况下,在FirstViewController中,您可以使用self.childViewControllers [0]访问标签栏控制器。一旦你有了这个引用,你可以像上面展示的那样获得对DiscoverViewController的引用。

+0

我明白了,谢谢。实际上,我试图从“发现视图控制器”控制“第一视图控制器”(例如更改背景颜色),所以我需要将“第一视图控制器”的引用传递给“发现视图控制器”,然后我可以将委派分配给“发现视图控制器”。我已经通过您的解决方案解决了它,再次感谢,但有没有更好的方法来实现它? – iForests 2013-03-21 08:35:01

+0

'FirstViewController * fvc =(FirstViewController *)self.parentViewController.parentViewController.parentViewController;''[fvc doSomething];'这是我试过的另一个解决方案。它工作但丑陋... – iForests 2013-03-21 08:40:01

1
use it : 

-(void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    if ([segue.identifier isEqualToString:@"PushToProdct"]) { 
     DiscoverViewController *discoverViewController = segue.destinationViewController; 

     [email protected]"Data you want to pass"; 
    } 
} 
+0

这不起作用,因为没有发现DiscoverViewController。与它的连接是一种关系,而不是一种关联,它没有标识符。 – rdelmar 2013-03-21 06:05:38

+0

segue.destinationViewController是我在问题中提到的TabBarController。 – iForests 2013-03-21 08:24:24