iOS
 Computer >> コンピューター >  >> プログラミング >> iOS

iOSでテキストフィールドの入力文字数をリアルタイムにカウントする方法

iOSアプリ開発において、テキストフィールドの操作とその挙動を扱うスキルは欠かせません。Appleはこの目的のためにUITextFieldDelegateというプロトコルを標準で提供しています。

詳細はApple公式ドキュメントをご参照ください。
UITextFieldDelegate – Apple Developer Documentation

フォーム入力を含むアプリを使ったことがある方なら、テキストを入力すると同時に文字数が表示され、入力できる文字数が制限されている場面を見たことがあるでしょう。本記事では、テキストフィールドへ入力する際に文字数を表示する方法を、ステップごとにわかりやすく解説します。

実装手順

ステップ1:プロジェクトの作成

Xcodeを起動し、「New Project」→「Single View Application」を選択します。プロジェクト名は「TextFieldCount」としましょう。

ステップ2:UIの配置とアウトレット接続

Main.storyboardを開き、下図のようにTextFieldとLabelを配置します。続いて、LabelとTextFieldそれぞれに対して@IBOutletを作成し、名前をそれぞれ「lblCount」「txtInputBox」として接続してください。

iOSでテキストフィールドの入力文字数をリアルタイムにカウントする方法

ステップ3:デリゲートの設定

ViewController.swiftでUITextFieldDelegateプロトコルを採用し、txtInputBoxのdelegateをselfに設定します。

class ViewController: UIViewController, UITextFieldDelegate {
txtInputBox.delegate = self

ステップ4:デリゲートメソッドの実装

shouldChangeCharactersInデリゲートメソッドを実装し、その中に以下のコードを記述します。

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
    if(textField == txtInputBox){
        let strLength = textField.text?.count ?? 0
        let lngthToAdd = string.count
        let lengthCount = strLength + lngthToAdd
        self.lblCount.text = "\(lengthCount)"
    }
    return true
}

ステップ5:アプリの実行

アプリをビルドして実行し、動作を確認しましょう。最終的なコード全体は以下の通りです。

サンプルコード(全文)

import UIKit
class ViewController: UIViewController, UITextFieldDelegate {
    @IBOutlet var txtInputBox: UITextField!
    @IBOutlet var lblCount: UILabel!
    override func viewDidLoad() {
        super.viewDidLoad()
        txtInputBox.delegate = self
    }
    func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
        if(textField == txtInputBox){
            let strLength = textField.text?.count ?? 0
            let lngthToAdd = string.count
            let lengthCount = strLength + lngthToAdd
            self.lblCount.text = "\(lengthCount)"
        }
        return true
    }
}

仕組みのポイント

shouldChangeCharactersInは、テキストが実際に変更されるに呼び出されるデリゲートメソッドです。そのため、「現在の文字数+新しく追加される文字数」を合計してラベルに表示しています。最後にtrueを返すことで、今回の入力操作が許可されます。逆にここでfalseを返せば、特定の条件下で入力を拒否する(文字数上限などの)バリデーションも簡単に実現できます。

実行結果

iOSでテキストフィールドの入力文字数をリアルタイムにカウントする方法

  1. Wordでテキストをミラーリング(反転)表示する方法

    Microsoft Wordでテキストをミラーリング(鏡像化)したい場面は、実は意外と多くあります。ミラーリングとは、テキストを左右に反転させたり、上下逆さまにひっくり返したりすることです。印刷物の裏面加工や、Tシャツなどへのアイロン転写用データ作成の際に必要になることがあります。しかし残念ながら、Wordには通常の状態でテキストを直接反転させる機能が用意されていません。テキストをミラーリングできるのは、そのテキストがテキストボックス内にある場合のみです。つまり、反転したい文字列は必ずテキストボックスに入力する必要があります。なお、テキストボックスを挿入すると枠線が表示されますが、心配はいりま

  2. iOS 16で送信済みのiMessageを取り消す方法と知っておくべき注意点

    iOS 16へのアップデートにより、送信済みのiMessageを取り消せるようになりました。アップデート後は、元恋人に送ってしまったメッセージをすぐに後悔したときや、上司への大事なメッセージに誤字脱字があったときでも、そのメッセージを削除できるのです。 しかし残念ながら、思っているほど単純な話ではありません。この機能を正しく動作させるには、メッセージを受け取る相手側もiOS 16にアップデートしている必要があるからです。自分のiPhone上でメッセージを削除しても、相手が旧バージョンのiOSを使い続けていれば、相手の画面にはメッセージが表示されたままになってしまいます。 つまり、送信を後悔す