如何将数据传递给从UIStoryboard实例化的视图控制器?

时间:2013-11-20 11:46:14

标签: ios objective-c uiviewcontroller uistoryboard

我使用以下代码实例化并推送UIViewController

RIYNetworkGameViewController *ngvc = 
      [[UIStoryboard storyboardWithName:@"Main" bundle:nil] 
       instantiateViewControllerWithIdentifier:@"networkGame"];
ngvc.food = 42;
[self.navigationController pushViewController:ngvc animated:YES];

有没有办法传入值以便在实例化期间使用它,而不是在实例化之后将值42赋值给属性?我只使用storyboards,并且没有任何nib个文件,因此我不确定调用哪些方法来实例化UIViewController

编辑:我在viewWillLayoutSubviews中创建并展示了一个SKScene,因此我需要在调用viewWillLayoutSubviews之前获取数据。

2 个答案:

答案 0 :(得分:0)

此时,您的视图控制器已实例化但未加载!

您应该只提供init初始化所需的信息。 例如,如果“food”是初始化相关数据,则应创建一个新的指定初始化程序,如instantiateViewControllerWithIdentifier:@"networkGame" andFood:42
(在这种情况下,在其实现中调用[super init])。

如果您的传递数据问题与初始化无关,为什么要使用除ngvc.food = 42;之外的其他方式传递数据?这是一个很好的做法。

答案 1 :(得分:0)

您可以在- prepareForSegue:sender:

中传递数据
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    NSString *identifier = [segue identifier];
    if ([identifier isEqualToString:@"yourSegueName"]) {
        YourControllerClass *controller = [segue destinationViewController];
        [controller setPassingData:passingData]
    }
}

要使用此功能,请拨打[self performSegueWithIdentifier:@"yourSegueName" sender:sender]而不是[self.navigationController pushViewController:controller animated:YES]