11

なしで別のView ControllerにプッシュするにはどうすればよいですprepareForSegueか?

myClassVC *viewController = [myClassVC alloc];
UIStoryboardSegue *segue = [[UIStoryboardSegue alloc] initWithIdentifier:@"pushToMyVC" source:self destination:viewController];

if ([segue.identifier isEqualToString:@"pushToMyVC"]) {
 NSLog(@"logging");
 myClassVC *viewController = (myClassVC *)[segue destinationViewController];
 [self presentViewController:viewController animated:YES completion:nil];        
}
4

4 に答える 4

46

プッシュ セグエをプログラムで呼び出したい場合は、Interface Builder でセグエに「ストーリーボード ID」を指定すると、次のことができます。

[self performSegueWithIdentifier:"pushToMyVC" sender:self];

または、セグエを実行したくない場合は、宛先のView Controllerをインスタンス化してから、そのView Controllerに手動でプッシュできます。あなたがする必要があるのは、宛先ビューコントローラーがInterface Builderで独自の「ストーリーボードID」を持っていることを確認することだけです。その後、次のことができます。

UIViewController *controller = [self.storyboard instantiateViewControllerWithIdentifier:@"DestinationController"];
[self.navigationController pushViewController:controller animated:YES];

あなたは「プッシュ」と言った(したがって、pushViewController上記で使用した)。「モーダルビューコントローラーを提示する」ことを本当に意図している場合、その2行目は次のとおりです。

[self presentViewController:controller animated:YES completion:nil];

ご覧のとおり、新しいシーンにプッシュするために使用する必要はありません。情報を宛先View Controllerに渡したい場合にprepareForSegueのみ使用します。prepareForSegueそれ以外の場合は必要ありません。

明らかに、ストーリーボードを使用していない場合 (たとえば、NIB を使用している場合)、プロセスはまったく異なります。prepareForSegueしかし、その環境には適用できないため、NIBを使用していないと思います。ただし、NIB を使用している場合は、次のようになります。

SecondViewController *controller = [[SecondViewController alloc] initWithNibName:@"SecondViewController" bundle:nil];
[self.navigationController pushViewController:controller animated:YES];
于 2013-03-12T21:11:51.977 に答える
3

[self presentViewController:viewController animated:YES completion:nil];セグエは、自動的に選択したトランジションを使用して宛先ビュー コントローラーをプッシュするため、必要ありません。

このプロセスを使用したくない場合は、次segueのようにビュー コントローラーを手動でプッシュする必要があります。

[self presentViewController:viewController animated:YES completion:nil];

ただし、最初にストーリーボードのセグエを必ず削除してください。

于 2013-03-12T21:04:28.637 に答える
0
   NSString * storyboardName = @"Main";
    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:storyboardName bundle: nil];
    UIViewController *vc = [storyboard instantiateViewControllerWithIdentifier:@"SecondViewControllerID"];
    [self presentViewController:vc animated:YES completion:nil];
于 2016-10-19T06:09:35.200 に答える