0

テーブルの行が選択され、完了ボタンが押された後にビューを変更する IBAction を設定しています。

ただし、presentViewController:animated を実行すると、navigationController が失われます。

そのため、どこにも行く方法がありません。代わりに「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];

^^それはセグエをうまく実行しますが、新しいビューでNSLogすると、「LoadAction」変数は(NULL)に等しくなります。

基本的に、addViewController var でビューを変更する必要なく @property を設定するにはどうすればよいですか? ありがとう。

4

2 に答える 2

3

In your first scenario, instead of -presentViewController:animated:completion:, you need to use -pushViewController:animated: on your navigation controller to avoid hiding it (and conversely, you'll use -popViewController:animated:, also called on the navigation controller, to dismiss it, rather than -dismissViewControllerAnimated:completion:):

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

As Wain notes, in your second scenario, you will need to do your configuration of addViewController in -prepareForSegue:sender: like so:

- (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

コードの 2 番目のセクションから[self performSegueWithIdentifier:@"segue" sender:self];、新しいビューを作成して表示するために使用するだけです。また、(上記のコードをトリガーするビュー コントローラーで) 実装- prepareForSegue:sender:して、新しいビュー コントローラーの構成を実行します。

于 2013-04-21T22:39:28.687 に答える