Допустим, вы вводите число 100, а затем десятичную точку. Когда numberFormattedString вызывается со строкой £100.
, он избавляется от £, и str будет содержать строку 100.
, которая [str floatValue]
преобразуется в значение с плавающей запятой 100, и, наконец, ваш форматировщик чисел выплевывает его обратно как строка £100
без десятичной точки. Таким образом, в основном [str floatValue]
убивает вашу десятичную точку.
Одним из решений является проверка того, когда вы получите десятичную точку в качестве строки замены в методе делегата текстового поля, и пропустите вызов numberFormattedString в этом случае. Затем, когда пользователь вводит следующую цифру, вы можете продолжить вызывать numberFormattedString, и преобразование должно произойти правильно. Вам просто нужно убедиться, что пользователь может ввести только одну десятичную точку.
РЕДАКТИРОВАТЬ: я только что понял, что мое предлагаемое решение по-прежнему не будет работать, если вы введете 0 после десятичной точки (например, 100,0), но я уверен, что есть небольшая настройка, которую вы можете найти, чтобы решить эту проблему.