ファビオ・カルドーゾさん、セグエには 2 種類あります
- 少ないセグエをトリガーし、
- トリガーされたセグエ
トリガーの少ないセグエでは、ある ViewController から別の ViewController に直接ドラッグするだけです。セグエを実行するアクションについては言及しません。これを行うには、上記のようにセグエ識別子を作成する必要があります。そして、コードで以下の行を呼び出します。
[self performSegueWithIdentifier:@"YOUR_IDENTIFIER" 送信者:self];
セグエの 2 番目の方法では、Ctrl キーを押しながらボタンから別の ViewController に直接ドラッグします。したがって、このためのコードを記述する必要はありません。そのボタンをクリックすると、ストーリーボードで選択したものは何でも、プッシュ、モデル、またはカスタム セグエのいずれかが実行されます。
以下のメソッドが実行される場合、セグエがソース ViewController で呼び出されます。ここでは、独自のコードを記述して、最初の ViewController から別の ViewController またはその他のものに値を渡すことができます。
-(void)prepareForSegue:(UIStoryboardSegue *)segue 送信者:(id)送信者
ViewController からのセグエが複数ある場合は、識別子が役に立ちます。このような識別子を使用できます
if ([segue.identifier isEqualToString:@"YOUR_IDENTIFIER"])
注: セグエは一方向にすぎないため、最初の ViewController から別のビューコントローラーにセグエを作成し、元に戻りたい場合 (モデル アクションの場合)、2 番目の ViewController のデリゲート メソッドを記述し、ボタン アクション コールをクリックする必要があります。
**FirstViewController.h**
@interface FirstViewController : UIViewController <SecondViewControllerDelegate>
{
}
- (IBAction) buttonTapped:(id)sender;
**FirstViewController.m**
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([segue.identifier isEqualToString:@"YOUR_IDENTIFIER"])
{
SecondViewController *svc_obj = segue.destinationViewController;
svc_obj.delegate = self;
}
}
- (void) buttonTapped:(id)sender
{
[self performSegueWithIdentifier:@"YOUR_IDENTIFIER" sender:self];
}
- (void) secondViewControllerDidCancel: (SecondViewController *) controller
{
[controller dismissViewControllerAnimated:YES completion:nil];
}
**SecondViewController.h**
@class SecondViewController;
@protocol SecondViewControllerDelegate <NSObject>
- (void) secondViewControllerDidCancel: (SecondViewController *) controller;
@end
@interface SecondViewController : UIViewController
{
}
@property (nonatomic, weak) id <SecondViewControllerDelegate> delegate;
- (IBAction)cancelButtonTapped:(id)sender;
**SecondViewController.m**
- (IBAction)cancelButtonTapped:(id)sender
{
[self.delegate secondViewControllerDidCancel:self];
}
@end