如何将数据从ViewController传递到Container View?

时间:2013-07-20 14:55:37

标签: ios objective-c uiviewcontroller

我在XCode中设置了一个故事板,并有一个MainViewController。在MainViewController中,我添加了一个ContainerView,它自然地与另一个VIewController创建了一个Segue。

在我的MainViewController.m文件中,我已经设置了数据,并希望将这些数据链接到ContainerView中的标签,但是我想我可以单击文件所有者并执行此操作但当然我不能,因为它们是2现在不同的viewcontrollers。

有人可以帮助我,因为我正在努力解决这个问题。必须有一个简单的方法,但我不能破解它!

谢谢

4 个答案:

答案 0 :(得分:28)

您可以像使用其他两个控制器一样使用prepareForSegue - 在实例化两个控制器之后,但在运行viewDidLoad之前,将调用该方法。另一种方法是使用父控制器的childViewControllers属性(嵌入式控制器是子控件)。所以,孩子将是self.childViewControllers [0]。

编辑后:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([[segue identifier] isEqualToString:@"EmbedSegue"]) {
        MyEmbeddedController *embed = segue.destinationViewController;
        embed.labelString = self.stringToPass;
    }
}

当然,您必须将名称更改为您拥有的名称。确保您在IB中为segue指定的名称与您在if语句中检查的名称相匹配。在此示例中,labelString是您在嵌入式控制器中设置的字符串属性。然后在该控制器的viewDidLoad方法中,您可以使用该字符串设置标签的值。

答案 1 :(得分:5)

这与仅在Swift中的one by rdelmar几乎相同。

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    if let embeddedVC = segue.destinationViewController as? MyEmbeddedController where segue.identifier == "EmbedSegue" {
        embeddedVC.labelString = self.stringToPass
    }
}

"EmbedSegue"必须使用您在Interface Builder中设置的segue标识符。

答案 2 :(得分:0)

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    // Make sure your segue name in storyboard is the same as this line
    if ([[segue identifier] isEqualToString:@"YOUR_SEGUE_NAME_HERE"])
    {
        // Get reference to the destination view controller
        YourViewController *vc = [segue destinationViewController];

        // Pass any objects to the view controller here, like...
        [vc setMyObjectHere:object];
    }
}

我还应该提一下,因为您使用的是Container视图,所以当您展示持有Container的prepareForSegue时,会触发ViewController

答案 3 :(得分:0)

回答Swift 4:

if let controller = segue.destinationController as? MyEmbeddedController, segue.identifier!.rawValue == "EmbedSegue" {
    controller.labelString = self.stringToPass
}