2013-04-15 2 views
0

У меня есть два поля UIText - textfield1 и textfield2.Отображение сообщения о предупреждении при наличии более чем одного нуля

Я просто делаю умножение двух текстовых полей. textfield2 имеет фиксированное значение, и в textfield1 пользователь может установить значение самостоятельно.

Теперь у меня есть одна проблема. Если пользователь устанавливает значение 0, я выводит предупреждающее сообщение.

if ([textfield1.text isEqualToString:@"0"]) 
{ 
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:APP_NAME message:@"You can not set Zero." delegate:nil cancelButtonTitle:@"OK" otherButtonTitles: nil]; 
    [alert show]; 
} 

Но, если пользователь устанавливает более одного нуля или десятичную ноль (0.0 или 0.00), то я не в состоянии отобразить предупреждающее сообщение.

+0

, что если пользователь устанавливает 0.0000003? –

+0

Простое правило. Если вы собираетесь делать арифметические операции, используйте типы чисел, а не строки. – Desdenova

ответ

5

Не работает со строками. Преобразовать номеров:

double value1 = [textfield1.text doubleValue]; 
if (value1 == 0.0) { 
    // show alert 
} 

Update: На самом деле, используя doubleValue это не очень хорошая идея, так как вы хотите, чтобы поддерживать пользователей со всего мира. Некоторые пользователи могут вводить значения как 0.5, а другой может использовать 0,5 и т. Д. Лучше использовать NSNumberFormatter для преобразования введенного текста в число.

NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init]; 
NSNumber *number = [formatter numberFromString:textfield1.text]; 
double value1 = [number doubleValue]; 
0

вы можете добавить < UITextFieldDelegate> к вашему xxclass.h

и в xxclass.m реализации делегат

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string 
{ 

    if([textField.text isEqualToString:@""] && [string isEqualToString:@"0"]){ 
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:APP_NAME message:@"You can not set Zero." delegate:nil cancelButtonTitle:@"OK" otherButtonTitles: nil]; [alert show]; 
    return NO; 
    } 

    return YES; 
} 
+0

Это не очень хорошая идея. Это не позволяет пользователю вводить значение, такое как '0,5'. – rmaddy

+0

ДА, Предпочтение не допускается. – xuanwenchao

+0

Но это не то, что хочет плакат. Поплавок разрешен, только не различные формы нуля. – rmaddy

1
float value1 = [textfield1 text] floatValue]; 
int value2 = [textfield1 text] intValue]; 
if (value1 == 0.0 || value2 == 0) { 
    // show alert 
} 
Смежные вопросы