LoginSignup
3
3

More than 3 years have passed since last update.

[Swift]アプリに画面遷移を追加する方法

Last updated at Posted at 2020-08-09
1 / 19

この記事は前回の[Swift]カウントアップアプリを作ってSwiftを触ってみようの続きです。

アプリの完成形はこちら

ソースコードはこちらから


画面遷移で抑えておきたいポイント

  • 画面遷移先のViewController
  • ViewControllerとプログラムコードとの繋がり
  • Segueという概念

画面遷移先のViewController

画面遷移するために新しいViewControllerを追加
ボタンなどを追加したLibraryからViewControllerを選択してドラッグ&ドロップ

スクリーンショット_2020-08-05_11_20_23.png

スクリーンショット_2020_08_07_23_41.png

画面にViewControllerが追加されたらOK


ViewControllerとプログラムコードとの繋がり

1.画面から新しいViewControllerを選択

スクリーンショット 2020-08-08 0.20.51.png

2.Identity inspectorを選択

新しく追加したViewControllerのCustom Classが空になっている
スクリーンショット_2020_08_07_23_41.png

このままだと画面遷移を行えないので、新しいClassを定義しなければならない。

新しいClassを定義

画面左下の+ボタンをクリック→NewFileをクリック
スクリーンショット 2020-08-08 0.00.12.png

Cocoa Touch ClassNext

スクリーンショット 2020-08-08 0.03.02.png

Class名NextViewControllerに変更

スクリーンショット 2020-08-08 0.04.21.png

Subclass of: UIViewControllerに変更

この項目はClassがどんな用途で使われるかを設定でき、初期段階で必要なプログラムをXcodeが書いてくれます。
スクリーンショット 2020-08-08 0.06.36.png
例えばここでUITableViewControllerを選ぶとテーブルを使うためのコードを自動で入力してくれます。

入力を終えたらNext

最後にファイルの保存場所を聞いてきます。
そのままCreateを押してください

スクリーンショット_2020_08_08_0_17.png


新しいViewControllerに新しいClassを紐づける

StoryBoardに戻って追加したViewControllerを選択
スクリーンショット 2020-08-08 0.20.51.png

スクリーンショット_2020-08-08_0_26_57.png

これで新しいViewControllerに新しいClassを紐づけることができました!


Segueという概念

Segueとは、storyboard上で画面遷移を表す部品です。
Segueは、画面遷移の方法と、どう画面遷移させるかを決めることができます。

詳しく説明しているサイトを紹介

ボタンに対してSegueを作成することもできます。
例えば、「設定ボタンをタップしたら設定画面に遷移する。」を実現したい場合はノンコーディングで画面遷移を行うことができます。

今回使用する方法はViewControllerからSegueを作成してコーディングを行って画面遷移を実装します。


Segueを作成

ViewControllerを選択→⌃(control) + ドラッグ&ドロップ

Manual SegueはPresent Modallyを選択
2020_08_08_00_35.gif

ViewControllerと新しいViewControllerがつながっていればOK
マークが違っていても画面遷移の見え方が変わるだけで、問題ないです。
スクリーンショット_2020_08_08_0_50.png


Segueに名前をつける

Segueを選択→Attribute inspectorIdentifire
→任意の名前をつける(今回はnext)
スクリーンショット_2020-08-08_0_54_04.png

SegueのPresentationをFullScreenに変更(任意)

変更すると、画面全体にViewが表示されます。
スクリーンショット_2020-08-09_14_35_04.png


遷移先のViewControllerに戻るボタンを設置

NextViewControllerに戻るボタンを新しく設置します.

Main.storyboard+ボタンButtonを選択してNextViewControllerドラッグ&ドロップ

それが完了したら、ボタンを選択してTitleをわかりやすい文字に変更してください。
スクリーンショット_2020_08_08_1_14.png

ボタンをNextViewControllerクラスと紐づける

  • 三マークをクリック→Assistantエディタを起動
    StoryBoardとコードを一緒にみることができる
    Xcode_InterfaceBuilderKit_DocumentGearMenu.png

  • 戻るボタンをクリック→ ⌃control +ドラッグ&ドロップ

NextViewControllerクラスにボタンを紐づける

紐付けポイント

  • Connection→Actionになっているか確認 スクリーンショット_2020_08_08_14_04.png

下準備は終了。画面遷移のコードを書いていく


画面遷移するためのコード

画面遷移をさせるためのコードはこれだけ

performSegue(withIdentifier: "next", sender: nil)

これを画面遷移させたい場所に書くだけで画面遷移します。


試しにやってみる

前回の記事[初心者向け]カウントアップアプリを作ってSwiftを触ってみようcountUpButtonを作成したので、
countが2になったら画面遷移するようにコードを書いていきます。

ViewController.swift内
    @IBAction func countUpButton(_ sender: Any) {
        //+ボタンを押すとラベルの文字をカウントアップ
        count = count + 1

        //画面遷移
        if count == 2 {
            performSegue(withIdentifier: "next", sender: nil)
            count = 0
        }

        countLabel.text = String(count)

        //カウントにあわせて文字の色を変更
        changeColor()

    }

⌘ + Rで実行

画面遷移できました🥳


画面遷移から戻る方法

これもたった1行で完了します。

dismiss(animated: true, completion: nil)

これを画面遷移させたい場所に書くだけで画面遷移します。


試しにやってみる

NextViewController.swift内
    @IBAction func backButton(_ sender: Any) {
        dismiss(animated: true, completion: nil)
    }

⌘ + Rで実行

画面遷移から戻ることができました🥳


画面遷移を行いながら値を渡す方法

画面遷移が無事終わったら、画面遷移を行う際に値も一緒に渡してみましょう!
今回は一般的に使われている方法を紹介します。

NextViewController.swiftに値を渡すための準備

  • 画面に値を表示するためのLabelを設置(+ボタンからUIパーツLabelを選択→NextViewController.swiftと紐づける。)
  • ViewControllerから値をもらうための変数passdataを定義
  • label.text = String(passdata)でLabelに値を反映

スクリーンショット 2020-08-09 14.21.35.png

NextViewController.swift
@IBOutlet weak var label: UILabel!
var passdata = 0
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
        label.text = String(passdata)
    }

値を渡すためのメソッドを定義

prepare(for segue: UIStoryboardSegue, sender: Any?)メソッドを定義

ViewController.swift
    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
     //引数segueの中に画面遷移に関する情報が含まれている。
        if segue.identifier == "next" {
           //NextViewControllerに値を渡す処理を書く。
        }
    }

performSegue(withIdentifier: "ID", sender: nil)で画面遷移を行うと自動的に、
prepare(for segue: UIStoryboardSegue, sender: Any?)メソッドが呼ばれます。

これはSegueが実行されようとしていることをView Controllerに通知するメソッドです。

このメソッドを使用して、新しいViewControllerに値を渡すことができます。

注意点

このメソッドはSegueが実行されようとしていることを通知するので、複数のSegueから呼び出されます。
したがって、if segue.identifier == "next"{・・・}のようにnextのSegueからの情報かどうかを判定してから値を渡す処理を書く必要があります.


メソッド内に処理を書く

ViewController.swift

    @IBAction func countUpButton(_ sender: Any) {
            //中略
            //画面遷移
            performSegue(withIdentifier: "next", sender: nil)
    }

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if segue.identifier == "next" {
            let nextVC = segue.destination as! NextViewController
            nextVC.passdata = count

        }

⌘ + R で実行

performSegue(withIdentifier: "next", sender: nil)を実行した時のcountの値を渡すことができました!


今回やったこと

  • 新しいViewControllerを作成して画面遷移を実装
  • ViewControllerとプログラムコードとの繋がり
  • Segueという概念の理解

以上でカウントアップアプリのチュートリアルは終わりです。
お疲れ様でした!

もっと深掘りしたい方

この続きとして、
カウントアップアプリを改造して,通知をn秒後に通知を出してみる (n>0)
の記事も参考にしてみてください!

最後に

最後までご覧いただきありがとうございます。
Twitterで主にSwiftについてのツイートをしているのでのぞいてみてください!

今回はSwiftの言語についてあまり詳しく説明しませんでしたが、
ここでもっと詳しい記事を書いているのでSwiftに興味が湧いた方は参考にしてみてください!

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3