我在XCode中设置了一个故事板,并有一个MainViewController。在MainViewController中,我添加了一个ContainerView,它自然地与另一个VIewController创建了一个Segue。
在我的MainViewController.m文件中,我已经设置了数据,并希望将这些数据链接到ContainerView中的标签,但是我想我可以单击文件所有者并执行此操作但当然我不能,因为它们是2现在不同的viewcontrollers。
有人可以帮助我,因为我正在努力解决这个问题。必须有一个简单的方法,但我不能破解它!
谢谢
答案 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
}