2016-01-05 3 views
2

То, что код, который я использовал, чтобы ограничить максимум 1 десятичного числа во все моих UITexField:Проблемы ограничение десятичной длиной

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


    let arrayOfSubStrings = computationString.componentsSeparatedByString(",") 


    if (arrayOfSubStrings.count == 1 && computationString.characters.count > 2) { 

     return false 

    } else if arrayOfSubStrings.count == 2 { 
     let stringPostDecimal = arrayOfSubStrings[1] 

     return stringPostDecimal.characters.count <= 1 
    } 



    return true 
} 

Но Я просто понимаем, что есть два типа Decimal Pad: с точкой и с запятой.

Например, мой симулятор iOS использует точку, а мой iPhone использует запятую. Так как я могу исправить эту проблему, остановив их обоих?

+0

Не могли бы вы сообщить мне некоторые номера образцов, которые вы хотите разрешить в своем текстовом поле? –

+0

Я написал это. Максимальное одно десятичное число, например: 1,1 или 1,1. –

+0

Кстати, самый простой способ проверить правильность строки - использовать регулярное выражение. Обратите внимание, что даже если клавиатура содержит только цифровые клавиши, пользователь все равно может ввести другой текст, например, с помощью copy-paste. Шаблон регулярного выражения должен быть чем-то похожим на '^ \ d ([.,] \ D {1})? $' – Sulthan

ответ

0

Там есть метод componentsSeparatedByCharactersInSet рассматривать более чем один разделительный персонажу

let commaDotCharacterSet = NSCharacterSet(charactersInString: ",.") 
let arrayOfSubStrings = computationString.componentsSeparatedByCharactersInSet(commaDotCharacterSet) 

или включать также десятичный разделитель текущей локали

let localeDecimalSeparator = NSLocale.currentLocale().objectForKey(NSLocaleDecimalSeparator) as! String 
let commaDotLocaleSeparatorCharacterSet = NSCharacterSet(charactersInString: ",." + localeDecimalSeparator) 
let arrayOfSubStrings = computationString.componentsSeparatedByCharactersInSet(commaDotLocaleSeparatorCharacterSet) 
+1

По моему опыту, лучший способ - использовать три символа - запятую ',', dot '.' и' NSLocaleDecimalSeparator' из текущей локали. – Sulthan

+0

Хорошо, я добавил эту опцию к ответу – vadian

0

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

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

    let arrayOfSubStrings = computationString.computationString.componentsSeparatedByCharactersInSet(NSCharacterSet(charactersInString: ".,")) 

    if (arrayOfSubStrings.count == 1 && computationString.characters.count > 2) { 
     return false 
    } else if arrayOfSubStrings.count == 2 { 
     let stringPostDecimal = arrayOfSubStrings[1] 
     return stringPostDecimal.characters.count <= 1 
    } 

    return true 
} 
Смежные вопросы