0

我设置了一个 IBAction 以在选择表格行并按下完成按钮后更改视图。

但是,当我运行 presentViewController:animated 时,我失去了我的导航控制器。

所以我没有办法去任何地方,然后如果我改为执行“performSegueWithIdentifier”,我的属性不会保存..所以没有值被传递......例如:

 ViewController *addViewController = (ViewController *)[self.storyboard instantiateViewControllerWithIdentifier:@"V_SignIn"];
 addViewController.LoadAction = @"NoSession";
 [addViewController setModalTransitionStyle:UIModalTransitionStyleCrossDissolve];
 [self presentViewController:addViewController animated:YES completion:NULL];

^^ 该代码有效,但删除了我的导航工具栏...

ViewController *addViewController = [[ViewController alloc] init];
addViewController.LoadAction = @"TEST";
[self performSegueWithIdentifier:@"segue" sender:self];

^^ 执行 segue 很好,但是当我在新视图中 NSLog 时,'LoadAction' var 等于(NULL)。

基本上,如何设置 @property 而无需使用 addViewController var 更改视图?谢谢。

4

2 回答 2

3

在您的第一个场景中-presentViewController:animated:completion:,您需要-pushViewController:animated:在导航控制器上使用而不是 以避免隐藏它(相反,您将使用-popViewController:animated:,也称为导航控制器来关闭它,而不是-dismissViewControllerAnimated:completion:):

ViewController *addViewController = (ViewController *)[self.storyboard instantiateViewControllerWithIdentifier:@"V_SignIn"];
addViewController.LoadAction = @"NoSession";
[self.navigationController pushViewController:addViewController animated:YES];

正如 Wain 所指出的,在第二种情况下,您需要像这样addViewController进行配置-prepareForSegue:sender:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    if ([segue.identifier isEqualToString:@"segue"]) {
        ViewController *addViewController = (ViewController*)segue.destinationViewController;
        // perform setup on addViewController
        addViewController.LoadAction = @"TEST";
        // ...
    } else if ([segue.identifier isEqualToString:@"someOtherSegue"]) {
        // ...
    }
}
于 2013-04-21T22:47:44.713 回答
2

从第二段代码开始,只需使用[self performSegueWithIdentifier:@"segue" sender:self];来创建和显示新视图。还要实现- prepareForSegue:sender:(在触发上述代码的视图控制器中)来执行新视图控制器的配置。

于 2013-04-21T22:39:28.687 回答