Swift

【Swift】設定画面・入力フォームの実装

「UITableViewController」の「StaticCell」を使って、設定画面のようなViewを作っていきます。

普通のTableViewを使って画面にセルを表示させるにはコードを書く必要がありますが、「StaticCell」を使うことでストーリーボードだけで表示させることができます。

最初に「StaticCell」の使い方を説明して、最後に例として上の動画のような入力フォームなどを作っていきます。

StaticCellの使い方

「StaticCell」は「UITableViewController」でしか使えないので、「ViewController」は削除します。

「TableViewController」を追加します。

「Is Initial View Controller」に忘れずチェックします。

「TableViewController」を「NaVigation Controller」に入れます。

TableViewを選択して、「Content」を「StaticCells」、「Sections」を「2」、「Style」を「Grouped」にします。

下の方にある「Background」を「Default」にします。

StaticCellの使い方はここまでです。

StaticCellはこれだけでTableViewのコードを書くことなく、セルを表示することができます。

入力フォーム

ここからは、入力フォームを作成して保存ボタンを押すと入力したものをコンソールに出力できるようにしていきます。

先日、時間割アプリを開発してリリースしたので、そこで作ったものと同じような画面を作成していきます。

まず、一つ目のセクションのヘッダーを入力します。

二つ目のセクションはセルを一つにします。「Rows」の数字を変えるとセルの数を変えられます。

「Horizontal Stack View」を一つ目のセクションの一つ目のセルの中に入れて、「Constraints」を上下左右0にします。

次に、それぞれのConstraintの「First Item」か「Second Item」にある「Superview.」の「Relative to margin」を選択して、「Constraint」の数値を0にします。上下左右のConstraintを同様にします。

「top」と「leading」は「Second Item」、「bottom」と「trailing」は「First Item」

追加した「StackView」の中に「Label」と「TextField」を入れます。

「Label」の「Width」を100にして、「Text」を「科目」にします。

「TextField」の「Placeholder」を「科目を入力」にし、「Border Style」を線のないやつにします。

次に、TableViewCellごとコピーして2回ペーストします。

下の2つのセルを削除し、上から2番目と3番目のセルの「Label」と「Placeholder」を編集します。

ここでは2番目を「教室」「教室を入力」、3番目を「教員」「教員を入力」としました。

次に、二つ目のセクションのセルの「Accessory」を「Disclosure Indicator」にします。

新しい「ViewController」を追加して、セルから「controlキー」を押しながら新しい「ViewController」までドラッグします。「Selection Segue」で「Show」を選択します。

「ViewController」の右上に「BarButtonItem」を追加し、「Title」を「保存」にします。

「ViewController.swift」を削除します。

新しく「UITableViewController」を作成します。「Class」を「TableViewController」、「Subclass of」を「UITableViewController」にします。

「Main.storyboard」で、「TableViewController」を選択し、「Class」を「TableViewController」にします。

「Assistant」を開いて余計なコードを削除し、下のようにします。

import UIKit

class TableViewController: UITableViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        
    }
}

3つそれぞれの「TextField」をControlを押しながらドラッグして名前をつけます。

次に、「BarButtonItem」をControlを押しながらドラッグして名前をつけ、「Type」を「UIBarButtonItem」にします。

上の3つのセルは選択できないようにするため、「Selection」を「None」にします。

コード

「保存」ボタンを押したら、「TextField」の文字がそれぞれ出力されるようにします。

import UIKit

class TableViewController: UITableViewController {

    @IBOutlet weak var subjectTextField: UITextField!
    @IBOutlet weak var roomTextField: UITextField!
    @IBOutlet weak var teacherTextField: UITextField!
    override func viewDidLoad() {
        super.viewDidLoad()
        
    }
    
    @IBAction func saveItem(_ sender: UIBarButtonItem) {
        if let subject = subjectTextField.text,
           let room = roomTextField.text,
           let teacher = teacherTextField.text {
            print(subject)
            print(room)
            print(teacher)
        }
    }
}