Segueの移動先から前の画面に遷移するには

はじめに

Segueで遷移した先の画面から元の画面に戻る処理を作成しようとしていたのですが、うまく行かず嵌ってしまいました。

そこで、今回はSegueを使用した画面遷移と移動元に戻る方法について説明します。

環境

Xcode:10.1
Swift:4.2.1

Segueを使用した遷移

はじめに、新規で「Single View App」のプロジェクトを作成します。

つづいて、Main.storyboardを開いて、以下のようにButtonを1つ配置して、タイトルを「次の画面」とします。

次に、View Controllerを追加してButtonを配置しタイトルを「前の画面」とします。また遷移先がわかりやすくなるように、背景色をオレンジにします。

それではSegueを使用して、画面を接続しましょう。

Segue(セグエ)とは、画面を遷移する際に使用する部品です。

[次の画面]ボタンを[control]キーを押しながら、新しくつい追加した画面にドラッグ&ドロップしてください。

以下のようにメニューが表示されますので、ここでは「show」を選択します。

それぞれの項目については以下の表を参照してください。

種類説明
Show現在表示している画面を押し出すようにして、遷移先の画面が横から表示される
Show Detail2分割されている画面の詳細画面を表示する
Present Modally現在の画面の上に遷移先の画面を重ねて表示する
Present As Popover現在の画面の上に遷移先の画面をポップアップ表示する
Custom画面遷移の動作を自作する

Segueを追加すると、画面と画面の間に矢印が作成されます。これがセグエです。

一度実行をして確認してみましょう。

[次の画面]をタップすると、画面が遷移するはずです。

前の画面に遷移させよう

次に、[前の画面]ボタンをタップした時に、遷移元の画面に戻れるようにします。

はじめに嵌ったポイントについて説明をします。

通常であればunwindメソッドをオーバーライドしてアクション接続を作成すれば遷移元の画面に移動することができましたが、どういうわけかうまく行きませんでした。使用しているバージョンは、Xcode 10.1、Swift 4.2.1です。

ViewController.swiftで 「unwind」と入力すると、候補が表示されますので、選択すると以下のようにコードを作成することができますが、このコードでは元の画面に遷移することができません。

正常に動作させるためのコードについて説明します。

前の画面に戻るには、ViewController.swiftに以下のコード(unwindPrevのメソッド)を記述します。変更点は overrideを削除して、「unwind」を別の名前に変更することです。ここでは「unwindPrev」としています。

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
    }

    @IBAction func unwindPrev(for unwindSegue: UIStoryboardSegue, towards subsequentVC: UIViewController) {

    }

}

unwindPrevのコードができたら、アクション接続を作成します。

[前の画面]ボタンを[control]キーを押しながら「Exit」へドラッグ&ドロップします。メニューが表示され、先ほど作成したメソッド名「unwindPrev」が表示されるので選択します。

以上で前の画面に戻れるようになります。

実行して確認しましょう。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください