Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

segue による画面遷移メモ

More than 5 years have passed since last update.

参考資料

StoryboardのUnwind Segueの使い方

Storyboard の画面遷移

push segue と NavigationController メモ

segue

segue による画面遷移

  1. [遷移元]- (BOOL)shouldPerformSegueWithIdentifier
    • 遷移するかどうかの判定
    • [identifier isEqualToString:@"id of segue"]
  2. [遷移元]- (void)prepareForSegue
    • 遷移実行に伴う値のやり取り
    • [[segue identifier] isEqualToString:@"id of segue"])
  3. (unwind segue なら)[遷移先]unwind segue メソッド(自分で定義したメソッド)
    • (IBAction)unwindSegueToXxx:(UIStoryboardSegue*)segue

segue に id(identifier) を設定する

通常の segue の場合

Storyboard 上で segue を選択して、identifier に文字列を入力します。

スクリーンショット 2014-05-11 16.16.21.png

unwind segue の場合

スクリーンショット 2014-05-11 16.23.10.png

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 を呼び出した時の流れ。

  1. 最初の画面を表示
    1. -[1stViewConroller viewDidLoad]
    2. -[1stViewConroller viewWillAppear:]
    3. -[1stViewConroller viewDidAppear:]
  2. modal segue で2番目の画面を呼び出す
    1. -[1stViewConroller shouldPerformSegueWithIdentifier:sender:]
    2. -[1stViewConroller prepareForSegue:sender:]
    3. -[2ndViewConroller viewDidLoad]
    4. -[1stViewConroller viewWillDisappear:]
    5. -[2ndViewConroller viewWillAppear:]
    6. -[2ndViewConroller viewDidAppear:]
    7. -[1stViewConroller viewDidDisappear:]
  3. unwindSegue で最初の画面に戻る
    1. -[2ndViewConroller shouldPerformSegueWithIdentifier:sender:]
    2. -[2ndViewConroller prepareForSegue:sender:]
    3. -[1stViewConroller unwindSegueTo1stViewConroller:]
    4. -[2ndViewConroller viewWillDisappear:]
    5. -[1stViewConroller viewWillAppear:]
    6. -[1stViewConroller viewDidAppear:]
    7. -[2ndViewConroller viewDidDisappear:]
qt6hy
jrits
信頼と魅力のある先進のITをもとに、お客様のワークスタイル・イノベーションの実現を目指します。
http://www.jrits.co.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away