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

【Swift】UITextFieldへの入力を数字のみに制限する2つの方法


iOSアプリ開発では、UITextFieldへの入力を数字だけに制限したい場面がよくあります。電話番号や金額、数量などの入力欄がその典型例です。本記事では、Swiftでテキストフィールドへの入力を数値のみに限定する2つの方法を紹介します。

方法1:Storyboardでキーボードの種類を変更する

もっとも手軽なのが、Storyboardからキーボードタイプを変更する方法です。手順は以下の通りです。

  • Storyboard上で、数値入力に制限したいテキストフィールドを選択する
  • Attributes Inspector(属性インスペクタ)を開く
  • 「Keyboard Type」から「Number Pad」を選択する

これで、テキストフィールドをタップした際に表示されるキーボードがテンキーになります。コードを書く必要がないため非常に簡単ですが、外部キーボードの接続やペースト操作などでは文字が入力される可能性が残ります。確実に制御したい場合は、次に紹介するデリゲートを使った方法と併用するのがおすすめです。

方法2:UITextFieldDelegateで入力をプログラム的に制限する

コードで厳密に制御したい場合は、UITextFieldDelegateを利用します。まずは以下の手順で準備を行いましょう。

  • Storyboardでテキストフィールドを選択し、ViewControllerに@IBOutletでアウトレットを作成する
  • ViewControllerをUITextFieldDelegateに準拠させる
  • テキストフィールドのdelegateにViewController自身を設定する
  • shouldChangeCharactersIn デリゲートメソッドを実装する

デリゲートメソッドの実装例は次の通りです。入力・ペーストされようとしている文字列に数字以外の文字が含まれている場合、その変更を拒否します。

func textField(_ textField: UITextField,
               shouldChangeCharactersIn range: NSRange,
               replacementString string: String) -> Bool {
    // 数字以外の文字が含まれていたら入力を許可しない
    return string.rangeOfCharacter(from: CharacterSet.decimalDigits.inverted) == nil
}

ViewController全体のコード例

import UIKit

class ViewController: UIViewController, UITextFieldDelegate {

    @IBOutlet weak var tf: UITextField!

    override func viewDidLoad() {
        super.viewDidLoad()
        tf.delegate = self
        // コードからキーボードを指定することも可能
        tf.keyboardType = .numberPad
    }

    func textField(_ textField: UITextField,
                   shouldChangeCharactersIn range: NSRange,
                   replacementString string: String) -> Bool {
        // 数字以外の文字が含まれていたら入力を許可しない
        return string.rangeOfCharacter(from: CharacterSet.decimalDigits.inverted) == nil
    }
}

実装のポイント

  • 削除操作の扱い: 文字を削除する際は replacementString が空文字列になるため、この判定でも常にtrueが返り、削除は問題なく行えます。
  • 判定ロジック: rangeOfCharacter(from:) を反転(inverted)した文字セットに対して使うことで、「数字以外の文字が1つでも含まれていたらfalse」という厳密なチェックができます。
  • 全角数字の扱い: CharacterSet.decimalDigits には全角数字も含まれます。半角数字だけに限定したい場合は、CharacterSet(charactersIn: "0123456789") を反転して使うとよいでしょう。

以上のように実装すれば、テキストフィールドには数字以外の文字を一切入力できなくなります。Storyboardでのキーボード設定とデリゲートによる制御を組み合わせることで、ユーザーにとって分かりやすく、かつ安全な数値入力欄を実現できます。


  1. JavaでJTextFieldに数値のみ入力できるようにする方法

    JTextFieldの入力制限とはデフォルトのJTextFieldは、数値・文字・特殊文字など、あらゆる種類の入力を受け付けることができます。しかし、ユーザーがJTextFieldに入力した内容を検証するのは意外と難しく、特にintなどの数値型へ変換する必要がある場合は注意が必要です。本記事では、JTextFieldに数値のみ入力できるように制限する方法を、具体的なサンプルコードとともに解説します。実装のポイントキー入力を監視するためにKeyListener(KeyAdapter)を使用し、押されたキーの文字が「0」から「9」の範囲内であるかどうかを判定します。数値であれば編集を許可し、それ以

  2. Macでスクリーンショットを撮る方法|画面全体・範囲指定・ウィンドウ別の撮り方を徹底解説

    AppleのMacは、一般的なコンピュータユーザーが求めるほぼすべての作業に対応できる万能マシンです。もちろん、スクリーンショット(画面キャプチャ)の撮影もそのひとつです。しかし実際には、Macでスクリーンショットを撮る具体的な方法を知らないユーザーは少なくありません。また、方法を知っていても、Macが実はさまざまな種類のスクリーンショットに対応していることに気づいていない方も多いようです。この記事では、Macで撮影できる多彩なスクリーンショットの種類と、それぞれの手順をわかりやすく解説します。画面全体のスクリーンショットを撮る方法まず、画面に撮影したい内容が表示されていることを確認します。そ