簡體   English   中英

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)
}

機智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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM