10
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

入力可能なTextFieldにカンマ区切りの数値を表示する

Last updated at Posted at 2015-10-14

#やりたいこと#
TextFieldに数字をキー入力するたびに、3桁ごとのカンマ区切りの数字として表示させる。
例:1234567と入力 → 1,234,567と表示、続けて8を入力すると12,345,678と表示
キーイベント発生時にNSNumberFormatterでテキスト整形すればOK
参考:[Swift]数字を三桁ごとにカンマ区切りにする

と同時に、TextFieldの値を用いて数値計算を行う。
整形した表示用テキストとは別に、数値をカンマ区切りでない状態で計算し、計算結果は別のTextFieldにカンマ区切り表示させる

cammaTextField.png

#実装#
Storyboard上に3つのTextFieldを置いてtextField1,2,3としてアウトレット化、それぞれのEditingChanged発生時に共通のIBAction(任意のメソッド名editingChangedとしておく)の指定もした状態で

ViewController.swift
import UIKit

class ViewController: UIViewController {
    @IBOutlet weak var textField1: UITextField!
    @IBOutlet weak var textField2: UITextField!
    @IBOutlet weak var textField3: UITextField!
    
    //上2段のTextFieldのEditingChangedに下の関数を設定
    @IBAction func editingChanged(sender: UITextField) {
        sender.text = addComma(removeComma(sender.text!))
        //計算してみる
        calc()
    }
    
    let formatter = NSNumberFormatter()
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        //キーボードを数値入力に固定
        textField1.keyboardType = UIKeyboardType.DecimalPad
        textField2.keyboardType = UIKeyboardType.DecimalPad
        textField3.keyboardType = UIKeyboardType.DecimalPad
        
        //3桁ごとにカンマ区切りするフォーマット
        formatter.numberStyle = NSNumberFormatterStyle.DecimalStyle
        formatter.groupingSeparator = ","
        formatter.groupingSize = 3
    }
    
    //カンマ区切りに変換(表示用)
    func addComma(str:String) -> String{
        if(str != "") {
            return formatter.stringFromNumber(Double(str)!)!
        }else{
            return ""
        }
    }
    //カンマ区切りを削除(計算用)
    func removeComma(str:String) -> String{
        let tmp = str.stringByReplacingOccurrencesOfString(",", withString: "")
        return tmp
    }
    
    //1,2段目の和を3段目に表示
    func calc() {
        //1,2段目が空でない(=数値)の時のみ計算する
        if(textField1.text != "" && textField2.text != ""){
            let sum = Double(removeComma(textField1.text!))! + Double(removeComma(textField2.text!))!
            textField3.text = addComma(String(sum))
        }
    }
}

#注意#

  • キー入力できる最大の桁数についてはここではサポートしていません。
  • この実装だと小数点が入力できません。
  • コピペ機能等を用いて数値以外を入力させないようにする対策についてもサポートしていません。
  • XCodeシミュレーター上でMacのキーボードから数値入力すると
    Can't find keyplane that supports type 8 for keyboard iPhone-Portrait-DecimalPad; using 2617181025_Portrait_iPhone-Simple-Pad_Default
    というエラーログが表示されるが、シミュレーターメニューのHardware>Keyboardから、シミュレーター上キーボードで入力するようにすればエラーにはならないのでOK。参考リンク
10
11
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
10
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?