2016-02-21 31 views
7

私はPoint Of Salesアプリケーションを開発しています。UITextField入力金額

だから私は

  1. のは、ユーザ入力100000が、私はそれが自動的に100,000を表示したいとしましょうしたいと思います。そして10000001,000,000になります。

  2. 2番目の問題は、ユーザーが.を入力できないようにすることです。

  3. 第3の問題は、これがお金であるため、最初に0を入力させることができないということです。

また、我々はに取る必要があり、私は任意の小数点以下を必要としません:

は、これまでのところ、私は唯一の

func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool { 

     let numberSet: NSCharacterSet = NSCharacterSet.decimalDigitCharacterSet().invertedSet; 
     return string.stringByTrimmingCharactersInSet(numberSet).length > 0 || string == ""; 
} 

はどうもありがとうございました

PS桁への入力を制限するために管理しています私が思いついたバックスペース

答えて

3

のXcode 8.2.1•スウィフト3.0.2

のいずれかを使用することができます
import UIKit 

class ViewController: UIViewController { 
    @IBOutlet weak var inputField: UITextField! 
    var amount: Int { return inputField.string.digits.integer } 
    override func viewDidLoad() { 
     super.viewDidLoad() 
     inputField.textAlignment = .right 
     inputField.keyboardType = .numberPad 
     inputField.text = Formatter.decimal.string(from: amount as NSNumber) 
     inputField.addTarget(self, action: #selector(editingChanged(_:)), for: .editingChanged) 
    } 
    func editingChanged(_ textField: UITextField) { 
     textField.text = Formatter.decimal.string(from: amount as NSNumber) 
     print(amount) 
    } 
} 

extension NumberFormatter { 
    convenience init(numberStyle: NumberFormatter.Style) { 
     self.init() 
     self.numberStyle = numberStyle 
    } 
} 
struct Formatter { 
    static let decimal = NumberFormatter(numberStyle: .decimal) 
} 
extension UITextField { 
    var string: String { return text ?? "" } 
} 

extension String { 
    private static var digitsPattern = UnicodeScalar("0")..."9" 
    var digits: String { 
     return unicodeScalars.filter { String.digitsPattern ~= $0 }.string 
    } 
    var integer: Int { return Int(self) ?? 0 } 
} 

extension Sequence where Iterator.Element == UnicodeScalar { 
    var string: String { return String(String.UnicodeScalarView(self)) } 
} 
+0

回答ありがとうございますが、editingChangedイベントはテキストフィールドのテキストが既に変更された後にのみトリガされるため、 'UITextFieldDelegate'ソリューションが好きです。つまり、ユーザーは遅延を見ることができます。 – JayVDiyk

+0

@JayVDiyk遅延はありません。編集に接続されたフィールドは、UIControlEventを変更しました。サンプルプロジェクトを試しましたか? –

+2

ありがとう、それは動作します。私は賞金のために22時間待たなければならない – JayVDiyk

2

単純なことを打ったときに、ユーザがカーソルの位置を変更するアカウント完全スウィフト2.0

上でテストして、あなたは、TextFieldデリゲートご覧1つのスイートあなた

  let price = Int(textField.text!) 

     let _curFormatter : NSNumberFormatter = NSNumberFormatter() 

     _curFormatter.numberStyle = NSNumberFormatterStyle.CurrencyStyle 

     _curFormatter.currencyCode = "INR" 

     _curFormatter.maximumFractionDigits = 0 

     let total = _curFormatter.stringFromNumber(price!) 

     textField.text = total 

OUTPUT

関連する問題