bri*_*San 0 xcode objective-c ios
VC1 = NewGameViewController
VC2 = GameViewController
NewGameViewController.m
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if( [segue.identifier isEqualToString:@"newGameSegue"]) {
GameViewController *gameVC = (GameViewController *)segue.destinationViewController;
NSArray *array = [self nameArrayForTextFieldArray:self.namePicker.textFieldArray withColon:YES];
gameVC.nameArray = [[NSArray alloc] initWithArray:array];
}
Run Code Online (Sandbox Code Playgroud)
-(NSArray *)nameArrayForTextFieldArray:(NSArray *)array withColon:(BOOL *)bool
在给定nsarray文本字段的情况下,它基本上返回一个字符串的nsarray.withcolon是一个bool,你是否希望字符串附加一个冒号到末尾.
当我调试我的代码时,gameVC中的_nameArray ivar在调用每一行之后仍然读取nil ...有人可以帮助我吗?
当即将执行从一个屏幕到另一个屏幕的segue时,UIKit调用prepareForSegue方法.它允许我们在显示之前将数据提供给新的视图控制器.通常你会通过设置它的属性来做到这一点.
可以在segue.destinationViewController中找到新的视图控制器.如果GameViewController嵌入了导航控制器,新的视图控制器将不是GameViewController,而是嵌入它的导航控制器.要获取GameViewController对象,我们可以查看导航控制器的topViewController属性.此属性指的是导航控制器中当前处于活动状态的屏幕.
要将对象发送到新视图控制器,您可以使用以下解决方案performSegueWithIdentifier:
例如,如果我们想执行一个segue按a,UIButton我们可以这样做:
在MyViewController.h我们创建一个IBAction(连接到UIButton),将按钮从故事板拖动到代码:
- (IBAction)sendData:(id)sender;
Run Code Online (Sandbox Code Playgroud)
在MyViewController.m我们实现方法:
- (IBAction)sendData:(id)sender
{
NSArray *array = [self nameArrayForTextFieldArray:self.namePicker.textFieldArray withColon:YES];
[self performSegueWithIdentifier:@"newGameSegue" sender:array];
}
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([segue.identifier isEqualToString:@"newGameSegue"]) {
UINavigationController *navigationController = segue.destinationViewController;
GameViewController *controller = (GameViewController *)navigationController.topViewController;
controller.nameArray = sender;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5294 次 |
| 最近记录: |