2016-09-12 2 views
0

Я хочу, чтобы пользователи увидели $ и запятую, когда они печатают текстовое поле из numberPad (без десятичной точки). Раньше я получал помощь и использовал ниже коды. Но клиенты не будут вводить десятичное значение (только значение Int).

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 

} 

При вводе, он всегда начинается со второго десятичного блока, Как удалить».00" с помощью редактирования кода и пусть он начинается с блока? Я пробовал в течение долгого времени, спасибо заранее.

ответ

1

Во-первых, у вас есть плохие советы. Вы не должны использовать shouldChangeCharactersInRange для изменения символов в текстовом поле. Это для проверки правильности введенных символов для поля. Единственное, что вы должны сделать в этом методе, это вернуть true, если пользователь вводил цифры или удалял, в противном случае - false. (Помните, что пользователь может использовать внешнюю клавиатуру, так что просто с клавиатурой вверх недостаточно, чтобы остановить запись без цифр.)

Вместо этого вы должны использовать @IBAction, подключенный к событию EditingChanged. Внутри этого метода вы должны обновить текст.

@IBAction func editingChanged(sender: UITextField) { 
    let digits = sender.text?.digitsOnly ?? "0" 
    sender.text = "$\(digits).00" // If I understand what you want. 
} 

Нижнее расширение должно находиться где-то в вашей базе кода. Это обычно полезно, так что храните его в сущности или что-то в этом роде, скорее всего, это понадобится в будущих проектах.

extension String { 
    var digitsOnly: String { 
     return componentsSeparatedByCharactersInSet(NSCharacterSet.decimalDigitCharacterSet().invertedSet).joinWithSeparator("") 
    } 
} 

Вы должны убедиться, что IBAction прикрепляется к событию EditingChanged:

enter image description here

+0

Я хочу, когда тип пользователя «1234», в текстовое поле будет показывать «$ 1» - > «$ 12» -> «$ 123» -> «$ 1,234» – user6702783

+0

Ahh, а затем ознакомьтесь с этим q/a: http://stackoverflow.com/questions/11787759/how-to-properly-format-currency-on-ios Просто замените '' $ \ (цифры) .00 "' выше на 'numberAsString' из ответа. –

+0

Привет, я попробовал ваше решение, проблема в том, когда я редактирую, запятая не добавит сразу. Он может появиться только после завершения редактирования. Но я этого не хочу. – user6702783

Смежные вопросы