UITextFieldinput金额
我正在开发一个销售点应用程序。
所以我想
-
比方说用户input
100000
但我希望它自动显示100,000
。1000000
1,000,000
变成1,000,000
-
第二个问题是,我不希望用户能够input
.
他们自己。 -
第三个问题是,既然这是钱,我们不能让用户在开始时input0。
有任何想法吗?
到目前为止,我已经设法限制input只有十进制数字
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:我不需要任何小数位,我们还需要考虑当用户改变光标位置时,退格
Xcode 8.2.1•Swift 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)) } }
简单的事情,我想出了在Swift 2.0上完全testing
你可以使用任何一个textField委托来看看哪一个适合你
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