在我的Xcode 4.2故事板中,我有2 UIViewControllers
,This one time
和In band camp
This one time
中,我有一个UIButton
,上面有“愚蠢的名字”In band camp
中,我有UILabel
,其上带有“标签”考虑到我们正在处理2个单独的类 AND ,我们使用storyboards
在 Xcode 4.2 中(通过segue设置视图之间的转换) )如何将视图控制器This one time
中的“愚蠢名称”传递给视图控制器In band camp
中的标签?“
答案 0 :(得分:19)
在方法内部,检查segue的标识符是否与“AwesomeSegue”匹配 - 如果是,请使用destinationViewControllerObject
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if ([segue.identifier isEqualToString:@"AwesomeSegue"]) {
InBandCampViewController *ibcVC = [segue destinationViewController];
ibcVC.yourData = self.someStuff;
}
}
答案 1 :(得分:0)
我必须为我的代码做一次调整,并且在使用此解决方案时也是另一种选择。
在我的情况下,我的中间有一个导航控制器中断。 MainViewController Segue 指向导航控制器,然后还有另一个 Segue 指向 SecondViewController 强>
因此,如果您需要从导航控制器获取 ViewController ,则可以使用此类代码:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
// ScoreViewController Storyboard Segue
if ([segue.identifier isEqualToString:@"AwesomeSegue"]) {
// Finding ViewController that is needed in Navigation Controller
UINavigationController *navigationController = segue.destinationViewController;
ScoreViewController *scoreViewController = [[navigationController viewControllers] objectAtIndex:0];
// Bellow implement your delegate or any data you want to pass
}
}
代表:
scoreViewController.delegate = self;
传递数据:
scoreViewController.newLabel.text = self.oldLabel.text;
通话方法:
[scoreViewController updateLabelText:self.oldLabel.text];
顺便说一句,传递数据时,您应该直接从 Sugue 将其分配给IBOutlet
。
如果您只是传递NSString
(或其他任何内容),并尝试将其文字分配到UILabel
中的viewDidLoad
,则会Nill
。
这是因为viewDidLoad
是在 Segue 之前实施的
使用viewDidAppear
也没有帮助,因为它会在 SecondViewController 呈现给屏幕后加载文本。您可能会看到UILabel
文本如何从“标签”更改为“愚蠢的名称”。
好吧,如果有人提出一些建议,我很高兴听到,因为我也只是一个新手。