NSNumberFormatter 分组
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)
}
Swit 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
}
我想将带数字的字符串格式化为如下所示: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)
}
Swit 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
}