SwiftのTextField完全ガイド!初心者でも使いこなせる10の方法

SwiftのTextField使用例とサンプルコードSwift
この記事は約24分で読めます。

 

【サイト内のコードはご自由に個人利用・商用利用いただけます】

この記事では、プログラムの基礎知識を前提に話を進めています。

説明のためのコードや、サンプルコードもありますので、もちろん初心者でも理解できるように表現してあります。

基本的な知識があればカスタムコードを使って機能追加、目的を達成できるように作ってあります。

※この記事は、一般的にプロフェッショナルの指標とされる『実務経験10,000時間以上』を凌駕する現役のプログラマチームによって監修されています。

サイト内のコードを共有する場合は、参照元として引用して下さいますと幸いです

※Japanシーモアは、常に解説内容のわかりやすさや記事の品質に注力しております。不具合、分かりにくい説明や不適切な表現、動かないコードなど気になることがございましたら、記事の品質向上の為にお問い合わせフォームにてご共有いただけますと幸いです。
(送信された情報は、プライバシーポリシーのもと、厳正に取扱い、処分させていただきます。)

はじめに

Swiftのプログラム言語を学び始めた方、特に初心者の方にとって、TextFieldは非常に便利なコンポーネントの1つです。

日常の多くのアプリケーションでテキスト入力の機能が必要とされるため、TextFieldの使い方をしっかりと理解し、使いこなせるようになることは非常に重要です。

この記事では、SwiftでのTextFieldの基本から応用まで、初心者にもわかりやすく解説します。

ガイドを読み進めることで、あなたもTextFieldの使いこなしプロになれるでしょう。

Swiftを学び始めたばかりの方、またはSwiftの中でTextFieldについての知識が不足していると感じる方は、このガイドを参考にして、さまざまな機能やカスタマイズ方法を習得してください。

●Swiftとは

Swiftは、Appleが2014年に公開した新しいプログラミング言語で、iOS、macOS、watchOS、tvOSといったAppleの各プラットフォームでのアプリケーション開発に利用されています。

CやObjective-Cに比べ、シンタックスがシンプルで直感的であり、初心者にとっても学びやすい言語となっています。

Swiftの最大の特徴として、安全性が挙げられます。多くのプログラムエラーをコンパイル時に検出することができ、ランタイムエラーのリスクを大幅に低減させることができます。

また、Swiftは高速なパフォーマンスを持っているため、複雑な計算や大量のデータ処理もスムーズに行うことができます。

○Swiftの基本概念

Swiftにはいくつかの基本的な概念があります。

主なものを簡単に解説します。

  • 変数と定数:Swiftでは、データを保存するために変数と定数を使用します。変数はvarキーワードを、定数はletキーワードを使用して宣言します。変数は値の変更が可能ですが、定数は一度設定された値を変更することはできません。
  • 型推論:Swiftは変数や定数を宣言する際、その型を明示的に指定しなくても、初期値から型を推論する機能を持っています。しかし、必要に応じて型を明示的に指定することもできます。
  • オプショナル:Swiftでは、変数が値を持たない可能性を明示的に示すための特別な型としてオプショナルが用意されています。オプショナルは値を持っている場合と持っていない場合の2つの状態を持つことができます。
  • 関数:Swiftの関数は、特定のタスクを実行する一連の命令のグループです。関数は再利用可能で、必要な場所で何度でも呼び出すことができます。

●TextFieldの基本

SwiftにおけるTextFieldは、ユーザーからのテキスト入力を受け取るための基本的なUIコンポーネントです。

iOSアプリ開発においては、このTextFieldを使うことで、フォーム、検索バー、ログイン画面など、多岐にわたる箇所でユーザー入力を扱うことができます。

○TextFieldとは

TextFieldは、ユーザーがキーボードを使用してテキストを入力できるようにするためのテキストボックスです。

このコンポーネントは、UIKitの一部としてSwiftで利用可能であり、アプリケーションのインターフェイスに簡単に組み込むことができます。

○TextFieldの主な用途

TextFieldの主な用途は非常に広範囲にわたります。

最も一般的な使用例は次の通りです。

  1. ログインや登録画面でのユーザー名やパスワードの入力欄
  2. 検索バーでの検索語句の入力
  3. フォームでの個人情報(例:住所、電話番号)の入力
  4. チャットアプリケーションでのメッセージ入力欄

これらの例を見ると、TextFieldがSwiftでのiOSアプリ開発においていかに重要であるかがわかります。

ユーザーインターフェースの基本的な部分を形成し、アプリケーションの使いやすさに直接影響を与えるため、その使い方をしっかりと理解し、効果的に利用することが重要です。

●TextFieldの使い方

TextFieldはSwiftでのテキスト入力を受け付ける基本的なUI部品です。

UITextFieldのクラスを使用して、テキスト入力フィールドを作成・カスタマイズすることができます。

SwiftでのTextFieldの使用方法やカスタマイズに関するサンプルコードを紹介しますので、初心者の方でも安心して使いこなせるようになります。

○サンプルコード1:基本的なTextFieldの配置

まずは、最も基本的なTextFieldの配置方法を見てみましょう。

import UIKit

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        // TextFieldを生成
        let textField = UITextField(frame: CGRect(x: 20, y: 100, width: 280, height: 40))
        textField.borderStyle = .roundedRect
        self.view.addSubview(textField)
    }
}

このコードでは、UIViewControllerの中でUITextFieldを作成し、ビューに追加しています。

この例では、UITextFieldを(20,100)の位置に、幅280、高さ40のサイズで配置し、角が丸くなった四角形のボーダースタイルを設定しています。

上記のコードを実行すると、アプリ上に四角いテキスト入力フィールドが表示されます。

こちらは最も基本的なTextFieldの配置方法となりますので、さまざまなアプリのUI作成時に利用することができます。

○サンプルコード2:プレースホルダーを設定する方法

次に、TextFieldにプレースホルダーを設定する方法を見ていきます。

プレースホルダーは、ユーザーに入力を促すためのヒントとしてテキストフィールド内に表示される文字列です。

import UIKit

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        // TextFieldを生成
        let textField = UITextField(frame: CGRect(x: 20, y: 100, width: 280, height: 40))
        textField.borderStyle = .roundedRect

        // プレースホルダーを設定
        textField.placeholder = "こちらに入力してください"

        self.view.addSubview(textField)
    }
}

このコードでは、UITextFieldのプロパティであるplaceholderに文字列を設定することで、テキストフィールド内にヒントとしてのテキストを表示しています。

この例では、”こちらに入力してください”というテキストをプレースホルダーとして設定しています。

上記のコードを実行すると、アプリ上のテキスト入力フィールド内に”こちらに入力してください”という薄く表示された文字列が現れます。

このプレースホルダーは、ユーザーがテキストを入力すると自動的に消えるため、ユーザーにとって入力のヒントとして非常に有効です。

○サンプルコード3:キーボードの種類を変更する

SwiftのTextFieldを使用する際、入力の内容に応じてキーボードの種類を変更することが可能です。

例えば、メールアドレスの入力時にはメール専用のキーボード、数字のみの入力を要求する場合には数字専用のキーボードを表示させることができます。

このようなキーボードのカスタマイズは、ユーザビリティを高めるための重要な要素です。

入力内容に合わせたキーボードを提示することで、ユーザーが容易に情報を入力することが可能となります。

下記のコードでは、キーボードの種類をメールアドレス専用に設定しています。

import SwiftUI

struct KeyboardTypeSample: View {
    @State private var email: String = ""

    var body: some View {
        VStack {
            TextField("メールアドレスを入力", text: $email)
                .keyboardType(.emailAddress) // メールアドレス専用のキーボードを指定
                .padding()
                .border(Color.gray, width: 1)
        }
        .padding()
    }
}

このコードでは、TextField.keyboardType(.emailAddress)を追加して、キーボードをメールアドレス入力専用に変更しています。

この例では、メールアドレスの入力を容易にするためのキーボードが表示されるように設定しています。

この設定を行うことで、ユーザーは”@”や”.”などのメールアドレス入力に必要なキーを手軽に入力することができます。

○サンプルコード4:TextFieldのデザインをカスタマイズ

SwiftのTextFieldは、見た目やデザインも柔軟にカスタマイズすることができます。

ここでは、基本的なデザインのカスタマイズについて解説します。

下記のコードは、TextFieldの背景色、文字色、ボーダーをカスタマイズした例です。

import SwiftUI

struct TextFieldDesignSample: View {
    @State private var inputText: String = ""

    var body: some View {
        TextField("こちらに入力してください", text: $inputText)
            .foregroundColor(.white) // 文字色を白に設定
            .background(Color.blue) // 背景色を青に設定
            .padding()
            .border(Color.black, width: 2) // 黒いボーダーを設定
    }
}

このコードでは、TextFieldのデザインをカスタマイズするために、.foregroundColor(), .background(), および .border() メソッドを使用しています。

この例では、白い文字色、青い背景色、そして太い黒いボーダーを適用しています。

○サンプルコード5:TextFieldでの入力値取得

SwiftのTextFieldを使用してテキスト入力を行う際、その入力値を取得する方法を解説します。

入力されたテキストの値は、様々な用途(例: データベースへの保存や画面間での値の受け渡し)で使用することができます。

下記のコードは、TextFieldでの入力値を取得し、ボタンを押すとその値を表示する例です。

import SwiftUI

struct InputValueSample: View {
    @State private var inputText: String = ""

    var body: some View {
        VStack {
            TextField("テキストを入力してください", text: $inputText)
                .padding()
                .border(Color.gray, width: 1)

            Button(action: {
                print(inputText) // 入力されたテキストをコンソールに表示
            }) {
                Text("表示")
            }
            .padding()
        }
    }
}

上記のコードを実行すると、TextFieldに何かテキストを入力し、「表示」というボタンを押すと、入力されたテキストがコンソールに表示されます。

●TextFieldの応用例

SwiftのTextFieldは多機能で、基本的な使用方法だけでなく、さまざまな応用的な使い方が可能です。

ここではその応用例として、よく使われるものをサンプルコードとともに解説します。

○サンプルコード6:パスワード入力の隠蔽

このコードでは、TextFieldを使用してパスワード入力時にテキストを隠蔽する方法を表しています。

この例では、ユーザーがTextFieldに入力した内容が伏字(●)として表示されるようにしています。

import SwiftUI

struct PasswordTextFieldView: View {
    @State private var password: String = ""

    var body: some View {
        TextField("パスワードを入力してください", text: $password)
            .textFieldStyle(RoundedBorderTextFieldStyle())
            .padding()
            .textContentType(.password)
            .keyboardType(.default)
            .isSecureTextEntry(true)
    }
}

上のコードをSwiftUIのプロジェクトで実行すると、入力された文字が伏字(●)として表示されるTextFieldが作成されます。

この機能は、ユーザーのパスワードなどの秘密情報を隠蔽する際に非常に役立ちます。

○サンプルコード7:実時刻のテキスト変更

このコードでは、現在の日時を取得し、それをTextFieldに表示しています。

この例では、ユーザーがアプリを起動すると、その時点での日時が自動的にTextFieldに表示される仕組みを構築しています。

import SwiftUI

struct CurrentTimeTextFieldView: View {
    @State private var currentTime: String = ""

    var body: some View {
        TextField("", text: $currentTime)
            .textFieldStyle(RoundedBorderTextFieldStyle())
            .padding()
            .onAppear {
                let formatter = DateFormatter()
                formatter.dateFormat = "yyyy年MM月dd日 HH:mm:ss"
                self.currentTime = formatter.string(from: Date())
            }
    }
}

上のコードをSwiftUIのプロジェクトで実行すると、アプリが起動されると同時に、現在の日時がTextFieldに自動的に表示されます。

この機能は、日時を記録するアプリや、特定の時刻にアクションを起こすアプリなどで役立つでしょう。

○サンプルコード8:制限付き入力(数字のみや文字数制限)

SwiftでのTextFieldでは、特定の文字や数字だけの入力を制限したり、入力可能な文字数を制限することができます。

これは、例えば、電話番号や郵便番号の入力時など、特定の形式や範囲の入力を要求する際に非常に役立ちます。

□数字のみの入力制限

このコードでは、キーボード入力を数字のみに限定しています。この例では、UIKeyboardTypenumberPadに設定することで、数字のみのキーボードが表示されるようにしています。

import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var numberTextField: UITextField!

    override func viewDidLoad() {
        super.viewDidLoad()

        // 数字のみのキーボードを設定
        numberTextField.keyboardType = .numberPad
    }
}

この設定を施すことで、ユーザは数字のみを入力することが可能となります。

□文字数制限の設定

このコードでは、入力可能な文字数を制限しています。

この例では、UITextFieldDelegateshouldChangeCharactersInメソッドを使用し、入力文字数が5文字を超えないように制限しています。

import UIKit

class ViewController: UIViewController, UITextFieldDelegate {

    @IBOutlet weak var limitedTextField: UITextField!

    override func viewDidLoad() {
        super.viewDidLoad()

        limitedTextField.delegate = self
    }

    func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
        let currentText = textField.text ?? ""
        guard let stringRange = Range(range, in: currentText) else { return false }

        let updatedText = currentText.replacingCharacters(in: stringRange, with: string)

        // 5文字以下であれば入力を許可
        return updatedText.count <= 5
    }
}

このように設定すると、limitedTextFieldへの入力は最大5文字までとなります。

○サンプルコード9:複数行のTextFieldの作成

通常のTextFieldでは、一行のテキストの入力が前提となっています。

しかし、複数行のテキストを入力させたい場合には、少し工夫が必要です。

このコードでは、UITextViewを使用して複数行のテキストの入力を許可しています。

この例では、UITextViewのプロパティを設定することで、TextFieldのような外見にしています。

import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var multiLineTextView: UITextView!

    override func viewDidLoad() {
        super.viewDidLoad()

        // TextViewのデザイン設定
        multiLineTextView.layer.borderWidth = 1.0
        multiLineTextView.layer.borderColor = UIColor.gray.cgColor
        multiLineTextView.layer.cornerRadius = 5.0
    }
}

この設定を施すと、multiLineTextViewは複数行のテキスト入力が可能なTextFieldのような見た目になります。

○サンプルコード10:入力時のリアルタイムバリデーション

ユーザが入力する際に、リアルタイムで入力内容を検証し、エラーメッセージを表示することができます。

これは、ユーザが入力する情報に正確性や一定のフォーマットが求められる場合に役立ちます。

このコードでは、入力されたテキストがメールアドレスの形式になっているかを検証しています。

この例では、正規表現を使ってメールアドレスのバリデーションを行い、適切でない場合にはエラーメッセージを表示しています。

import UIKit

class ViewController: UIViewController, UITextFieldDelegate {

    @IBOutlet weak var emailTextField: UITextField!
    @IBOutlet weak var errorMessageLabel: UILabel!

    override func viewDidLoad() {
        super.viewDidLoad()

        emailTextField.delegate = self
        errorMessageLabel.isHidden = true
    }

    func textFieldDidEndEditing(_ textField: UITextField) {
        if isValidEmail(email: textField.text ?? "") {
            errorMessageLabel.isHidden = true
        } else {
            errorMessageLabel.isHidden = false
            errorMessageLabel.text = "正しいメールアドレスを入力してください。"
        }
    }

    func isValidEmail(email: String) -> Bool {
        let emailRegex = "[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,64}"
        let emailTest = NSPredicate(format:"SELF MATCHES %@", emailRegex)
        return emailTest.evaluate(with: email)
    }
}

ユーザがメールアドレスとして正しくないテキストを入力すると、「正しいメールアドレスを入力してください」というメッセージが表示されます。

これにより、ユーザは自分の入力ミスにすぐに気づくことができます。

●注意点と対処法

SwiftでTextFieldを使用する際、さまざまな注意点があります。

しかし、これらの注意点を知っておくことで、より効率的に、そしてユーザーフレンドリーなアプリケーションの開発が可能となります。

○不具合の可能性とその対応

TextFieldを使用する際には、いくつかの不具合や問題点が考えられます。

ここではその中でも特によく遭遇するものを取り上げ、対処法について詳しく解説します。

□入力内容が予期せず消える

この問題は、TextFieldの再描画や画面遷移時に特に発生しやすいです。

TextFieldの内容が保存されない場合、ユーザーは入力し直す必要があり、UX(ユーザーエクスペリエンス)が低下します。

対処法として、TextFieldの内容は変数やデータベースなどに一時保存しておくと良いでしょう。

特に画面遷移する前には、TextFieldの内容を保存するように注意しましょう。

   // TextFieldの内容を保存する変数
   var textFieldContent: String?

   // TextFieldの内容が変更された際に呼ばれるメソッド
   func textFieldDidChange(textField: UITextField) {
       textFieldContent = textField.text
   }

このコードでは、TextFieldの内容が変更されるたびに、textFieldDidChangeメソッドが呼び出され、その内容をtextFieldContent変数に保存しています。

□キーボードが表示されたままとなる

TextFieldをタップしてキーボードを表示した後、他の部分をタップしてもキーボードが非表示にならないことがあります。

対処法として、画面の任意の位置をタップした際に、キーボードを閉じる処理を追加します。

   override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
       self.view.endEditing(true)
   }

このコードでは、画面をタップした際にtouchesBeganメソッドが呼び出され、endEditingメソッドを使ってキーボードを閉じています。

○TextFieldの最適な使用シチュエーション

TextFieldは非常に便利なUIコンポーネントですが、すべての場面で最適とは限りません。

ここでは、TextFieldの適切な使用シチュエーションについて解説します。

□短いテキストの入力

例えば、ユーザー名やパスワード、郵便番号など、短いテキストの入力にはTextFieldが適しています。

しかし、大量のテキストや複数行のテキストを入力する場合にはTextViewなどの別のUIコンポーネントを検討した方が良いでしょう。

□リアルタイムでのバリデーションが必要な場合

TextFieldは入力内容の変更を検知し、リアルタイムでのバリデーションやフィルタリングに適しています。

例えば、メールアドレスのフォーマットチェックや、パスワードの強度チェックなど、ユーザーが入力する際に即座にフィードバックを提供したい場面での使用が考えられます。

□入力補完やサジェスチョンを提供する場面

TextFieldには、入力補完やサジェスチョンを表示するための機能が豊富に用意されています。

ユーザーが入力する内容を予測し、選択肢を提示することで、ユーザビリティを高めることができます。

●カスタマイズ方法

SwiftのTextFieldは非常に汎用性が高く、多岐にわたるカスタマイズが可能です。

アプリの見た目や機能性を高めるため、基本的なカスタマイズ方法を習得することは必須です。

ここでは、フォントや色の変更方法から、アイコンや画像の追加方法まで、TextFieldのカスタマイズ方法を詳しく解説します。

○フォントや色の変更方法

TextFieldのフォントや色をカスタマイズすることで、アプリのデザインをユーザーの好みやブランドのテーマに合わせることができます。

下記のサンプルコードでは、TextFieldのフォントと色を変更する方法を表しています。

import SwiftUI

struct ContentView: View {
    @State private var inputText: String = ""

    var body: some View {
        TextField("入力してください", text: $inputText)
            .font(.custom("Arial", size: 20)) // フォントの変更
            .foregroundColor(.blue) // テキストの色を青に変更
            .padding()
            .border(Color.gray)
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}

このコードでは、fontメソッドを使ってTextFieldのフォントをArialに変更し、foregroundColorメソッドを使用してテキストの色を青にしています。

実際にこのコードを実行すると、青色のArialフォントでテキストが表示されるTextFieldが作成されます。

○アイコンや画像の追加方法

TextFieldにアイコンや画像を追加することで、視覚的な情報を提供したり、デザインのアクセントとして利用することができます。

下記のサンプルコードは、TextFieldの左側にアイコンを追加する方法を表しています。

import SwiftUI

struct ContentView: View {
    @State private var inputText: String = ""

    var body: some View {
        HStack {
            Image(systemName: "magnifyingglass") // システムアイコンを使用
                .foregroundColor(.gray)
            TextField("検索", text: $inputText)
                .padding()
                .border(Color.gray)
        }
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}

このコードでは、HStackを使用してアイコンとTextFieldを横並びに配置しています。

ImagesystemNameプロパティにより、システムアイコンの「magnifyingglass」を指定しています。

このサンプルを実行すると、検索アイコンが表示されるTextFieldが作成されます。

まとめ

SwiftのTextFieldは、アプリ開発において頻繁に利用されるUIコンポーネントの一つです。

そのカスタマイズ性の高さは、アプリのユーザビリティやデザインを向上させるための大きな鍵となります。

本記事では、フォントや色の変更から、アイコンや画像の追加方法まで、さまざまなカスタマイズ方法を詳しく解説しました。

これらの知識を活かし、ユーザーにとって使いやすく、視覚的に魅力的なアプリを作成することができます。

SwiftのTextFieldのカスタマイズ方法を習得することで、アプリの質をさらに高めることが期待できるでしょう。