Это немного неясно, но то, что вы пытаетесь сделать, не может действительно работать, но есть альтернатива.
В вашем коде у вас есть:
float num1 = [number1 floatValue];
[number2 setFloatValue: (num1*2.0)];
Запросы первой строки текущее значение number1
.Поскольку к number1
присоединен форматер чисел, он вызывается для форматирования текста ... и, если вы ввели, скажем, 123.
, на этом этапе отформатированный результат будет 123
... и ваша десятичная точкаисчез.Вы заметите, что вы также не можете вводить запятые (разделители тысяч).
Таким образом, основная проблема заключается в том, что после каждый символ вводится, что ваш код заставляет его быть действительным числом в этот момент .
Альтернативой является выполнение ваших действий только после ввода пользователем полного номера.Вы можете либо написать код самостоятельно для анализа ввода по мере ввода каждого символа, либо вы можете использовать быстрый и простой метод ожидания, пока пользователь не нажмет и не ответит на действие.
Чтобы сделать последнее, измените свой кодна:
- (IBAction) textDidChange:(id)sender
{
if (sender == number1)
{
float num1 = [number1 floatValue];
[number2 setFloatValue: (num1*2.0)];
}
else if (sender == number2)
{
float num2 = [number2 floatValue];
[number1 setFloatValue: (num2/2.0)];
}
}
и подключите его к элементу управления в качестве «селектора» и удалите соединение «делегат», которое у вас уже есть.
Это решение менее «динамично», чем то, что вы пытались, но это работает.Чтобы получить динамический ответ, вам нужно написать более сложный код, как указано выше.