我使用以下代码实例化并推送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
之前获取数据。
答案 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]
。