2016-08-22 4 views
1

Кто-то помогает мне сделать текстовое поле с указанием запятой и $, но всякий раз, когда всегда будет .00 хвост номера даже я удаляю все в текстовое поле. Как удалить это, если кто-то только набирает целое число или ничего? Большое спасибо!Swift: Как удалить .00 из NSNumberFormatter?

func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool { 
    let oldText = textField.text! as NSString 
    var newText = oldText.stringByReplacingCharactersInRange(range, withString: string) as NSString! 
    var newTextString = String(newText) 

    let digits = NSCharacterSet.decimalDigitCharacterSet() 
    var digitText = "" 
    for c in newTextString.unicodeScalars { 
     if digits.longCharacterIsMember(c.value) { 
      digitText.append(c) 
     } 
    } 

    let formatter = NSNumberFormatter() 
    //  formatter.usesSignificantDigits = false 
    formatter.numberStyle = NSNumberFormatterStyle.CurrencyStyle 
    formatter.locale = NSLocale(localeIdentifier: "en_US") 
    let numberFromField = (NSString(string: digitText).doubleValue)/100 

    newText = formatter.stringFromNumber(numberFromField) 

    textField.text = String(newText) 

    return false 

} 
+0

http://www.codingexplorer.com/getting-started-with- nsnumberformatter/ –

ответ

0

Попробуйте это,

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


    let oldText = textField.text! as NSString 
    var newText = oldText.stringByReplacingCharactersInRange(range, withString: string) as NSString! 
    var newTextString = String(newText) 

    let digits = NSCharacterSet.decimalDigitCharacterSet() 
    var digitText = "" 
    for c in newTextString.unicodeScalars { 
     if digits.longCharacterIsMember(c.value) { 
      digitText.append(c) 
     } 
    } 

    let formatter = NSNumberFormatter() 
    //  formatter.usesSignificantDigits = false 
    formatter.numberStyle = NSNumberFormatterStyle.CurrencyStyle 
    formatter.locale = NSLocale(localeIdentifier: "en_US") 
    let numberFromField = (NSString(string: digitText).doubleValue)/100 

    newText = formatter.stringFromNumber(numberFromField) 

    if newText .isEqualToString("$0.00") { 

     newText = "" 

    } 

    textField.text = String(newText) 

    return false 

} 

Я только добавил,

if newText .isEqualToString("$0.00") { 

     newText = "" 

    } 

в вашем методе.

Update: (как просили в комментариях)

Это много простой замены метод с одним ниже,

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


    let oldText = textField.text! as NSString 
    var newText = oldText.stringByReplacingCharactersInRange(range, withString: string) as NSString! 
    var newTextString = String(newText) 

    let digits = NSCharacterSet.decimalDigitCharacterSet() 
    var digitText = "" 
    for c in newTextString.unicodeScalars { 
     if digits.longCharacterIsMember(c.value) { 
      digitText.append(c) 
     } 
    } 

    // let formatter = NSNumberFormatter() 
    //  formatter.usesSignificantDigits = false 
    // formatter.numberStyle = NSNumberFormatterStyle.CurrencyStyle 
    // formatter.locale = NSLocale(localeIdentifier: "en_US") 

    let numberFromField = (NSString(string: digitText).intValue) 



    newText = NSString.localizedStringWithFormat("$%d", numberFromField) 

//  if newText .isEqualToString("$0.00") { 
//    
//   newText = "" 
//   
//  } 

    textField.text = String(newText) 

    return false 

} 
+0

Привет, это хорошо. Как насчет того, когда я набираю целое число и окончательно удаляю десятичную часть? – user6702783

+0

не получает вас, что вы просите !! – Lion

+0

Если я хочу напечатать 100, textfiled покажет $ 100.00, как сделать это в $ 100. – user6702783

1

набор minimumFractionDigits и maximumFractionDigits из NSNumberFormatter() ::

formatter.minimumFractionDigits = 1 
formatter.maximumFractionDigits = 1 
+0

Если я установил это, я не могу ввести текстовое поле. – user6702783