私はストーリーボードを使用しています。ストーリーボードには、別のView Controllerに接続したボタンがあります。ボタンをクリックすると、もう一方のView Controllerが表示されます。Action Segue - ストーリーボードのプッシュを使用してこれを接続しました。また、ボタンを IBAction プロパティに接続しました。問題は、ボタンをクリックすると、最初に接続されているView Controllerに移動し、その後IBAction関数を実行することです。この順序を変更するにはどうすればよいですか?
3 に答える
その順序を変更することはできません。できることは 2 つあります。
最初: セグエのみを使用します。prepareForSegue:
そこにコードを上書きして配置します。そのView Controllerから複数のセグレがある場合prepareForSegue:
は、現在実行されているセグレを区別できます。そのためには、一意の名前/セグエ ID を提供する必要があります。
2 番目: IBAction のみを使用します。IBAction メソッド内で、最後に を呼び出しますperformSegueWithIdentifier:sender:
。繰り返しますが、そのためには、すべてのセグエに一意のセグエ ID を付ける必要があります。
セグエからIBActionをチェーンすることでこれを解決しました。セグエなしで「保存」アクションを実行できるため (ボタンを IBAction にチェーンすると便利な場合があります)、必要に応じてビュー コントローラーを閉じるためにセグエを使用できるため、このアプローチが最も便利だと思います。
-(IBAction)save:(id)sender
{
/* Do some Save stuff */
}
次に、私の prepareForSegue:sender で:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([[segue identifier] isEqualToString:@"save"])
{
[self save:sender];
}
}
セグエ以外のボタンを IBAction にリンクし、アンワインドなどのボタンを「保存」という識別子でセグエします。魔法。
自問すべき質問は、なぜ両方を使用しているのかということです。1つを選んで、それに固執してください。
セグエが発生したときにいくつかのアクションを実行したい場合は、実装する必要があります
コメントに対処するための更新
実際、コードでそれを行う方法がわかりません。Action Segue Push を使用せずにストーリーボードにある ViewController をロードするにはどうすればよいですか?
私が見つけた最も簡単な方法は、ビュー コントローラーの識別子を設定できるストーリーボードです。
ストーリーボード IDがMyViewControllerに設定されていることに注意してください
これで、IBAction メソッドで次のことができます。
UIViewController *myViewController = [[UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil] instantiateViewControllerWithIdentifier:@"MyViewController"];
[self presentViewController:myViewController animated:YES completion:nil];