[英]NSNumberFormatter grouping
我想用數字格式化字符串,使其看起來像這樣: XX XX XX
(例如12 34 56
)
我正在使用帶有分組分隔符的NSNumberFormatter
:
let formatter = NSNumberFormatter()
formatter.usesGroupingSeparator = true
formatter.groupingSize = 2
formatter.groupingSeparator = " "
if let number = Int(theText.stringByReplacingOccurrencesOfString(" ", withString: "")) {
let numberToFormat = NSNumber(integer:number)
textField.text = formatter.stringFromNumber(numberToFormat)
}
如果您輸入數字123456
,它將正常工作-格式為12 34 56
我在shouldChangeCharactersInRange
方法中使用了此方法,因此鍵入時應格式化數字。 分組分隔符定義數字的分組是根據右側的groupingSize
值進行的,因此,當您鍵入123456
這就是文本的更改方式:
1
12
1 23
12 34
1 23 45
12 34 45
我想格式化如下:
1
12
12 3
12 34
12 34 5
12 34 56
是否可以從哪一側定義分隔符分組編號?
不知道您是否必須隱式轉換為Int
,在末尾添加“ 0”怎么樣? 然后刪除最后一個“ 0”。
let formatter = NSNumberFormatter()
formatter.usesGroupingSeparator = true
formatter.groupingSize = 2
formatter.groupingSeparator = " "
var str = "12345"
if str.characters.count % 2 != 0 {
str += "0"
}
if let number = Int(str.stringByReplacingOccurrencesOfString(" ", withString: "")) {
let numberToFormat = NSNumber(integer:number)
formatter.stringFromNumber(numberToFormat)
}
另一個解決方案:
let string = "12345"
var results = [String]()
for index in 0 ..< string.characters.count-1 {
if index % 2 == 0 {
let range = NSRange(location: index, length: 2)
results.append((string as NSString).substringWithRange(range))
}
}
if string.characters.count % 2 != 0 {
let last = (string as NSString).substringFromIndex(string.characters.count-1)
results.append(last)
}
機智4
您必須使用UITextField的委托: func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String)
這工作正常:
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
if textField == YourTextField {
if (textField.text?.count)! < 8 {
let formatter = NumberFormatter()
formatter.usesGroupingSeparator = true
formatter.locale = NSLocale(localeIdentifier: "en_GB") as Locale?
formatter.groupingSize = 2
formatter.groupingSeparator = "-" // if you want the format XX-XX-XX
// Uses the grouping separator corresponding
if let groupingSeparator = formatter.groupingSeparator {
if string == groupingSeparator {
return true
}
if let textWithoutGroupingSeparator = textField.text?.replacingOccurrences(of: groupingSeparator, with: "") {
var totalTextWithoutGroupingSeparators = textWithoutGroupingSeparator + string
if string == "" { // pressed Backspace key
totalTextWithoutGroupingSeparators.characters.removeLast()
}
if let numberWithoutGroupingSeparator = formatter.number(from: totalTextWithoutGroupingSeparators),
let formattedText = formatter.string(from: numberWithoutGroupingSeparator) {
print(numberWithoutGroupingSeparator)
numberWithoutGroupingSeparators = String(format: "%@", numberWithoutGroupingSeparator)
textField.text = formattedText
return false
}
}
}
return true
}
}
return true
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.