参考資料
push segue と NavigationController メモ
segue
segue による画面遷移
- [遷移元]- (BOOL)shouldPerformSegueWithIdentifier
- 遷移するかどうかの判定
- [identifier isEqualToString:@"id of segue"]
- [遷移元]- (void)prepareForSegue
- 遷移実行に伴う値のやり取り
- [[segue identifier] isEqualToString:@"id of segue"])
- (unwind segue なら)[遷移先]unwind segue メソッド(自分で定義したメソッド)
- (IBAction)unwindSegueToXxx:(UIStoryboardSegue*)segue
segue に id(identifier) を設定する
通常の segue の場合
Storyboard 上で segue を選択して、identifier に文字列を入力します。
unwind segue の場合
modal segue で単に前の画面に戻る
下記自体は segue ではないので、前述した shouldPerformSegueWithIdentifier とか prepareSegue などは発生しない。
- [self dismissViewControllerAnimated:YES completion:NULL]
関連メモ
- 制御のために segue には identifier(文字列) を設定する。
- modal segue を明示的に呼び出す: performSegueWithIdentifier
画面遷移に関連して UIViewController の関連メソッド
- (void)viewDidLoad
{
// View が表示される最初の1回だけ呼ばれる
NSLog(@"viewDidLoad");
}
- (void)viewWillAppear:(BOOL)animated
{
// View が表示される直前に呼ばれる
NSLog(@"viewWillAppear");
}
- (void)viewDidAppear:(BOOL)animated
{
// View の表示完了後に呼ばれる
NSLog(@"viewDidAppear");
}
- (void)viewWillDisappear:(BOOL)animated
{
// View が別の View へ切り替わる直前に呼ばれる
NSLog(@"viewWillDisappear");
}
- (void)viewDidDisappear:(BOOL)animated
{
// View が別の View へ切り替わった後に呼ばれる
NSLog(@"viewDidDisappear");
}
実際の呼び出しの流れ
最初の画面が 1stViewController、そこから modal で 2ndViewController を呼び出した時の流れ。
- 最初の画面を表示
- -[1stViewConroller viewDidLoad]
- -[1stViewConroller viewWillAppear:]
- -[1stViewConroller viewDidAppear:]
- modal segue で2番目の画面を呼び出す
- -[1stViewConroller shouldPerformSegueWithIdentifier:sender:]
- -[1stViewConroller prepareForSegue:sender:]
- -[2ndViewConroller viewDidLoad]
- -[1stViewConroller viewWillDisappear:]
- -[2ndViewConroller viewWillAppear:]
- -[2ndViewConroller viewDidAppear:]
- -[1stViewConroller viewDidDisappear:]
- unwindSegue で最初の画面に戻る
- -[2ndViewConroller shouldPerformSegueWithIdentifier:sender:]
- -[2ndViewConroller prepareForSegue:sender:]
- -[1stViewConroller unwindSegueTo1stViewConroller:]
- -[2ndViewConroller viewWillDisappear:]
- -[1stViewConroller viewWillAppear:]
- -[1stViewConroller viewDidAppear:]
- -[2ndViewConroller viewDidDisappear:]