2012-05-29 2 views
0

Я вызываю метод textfiled, но probelm - это то, что я хочу ввести 1.0, а если значение не равно 1.0 или 1,5 или мои желаемые значения, тогда это может показать ошибку сообщение, но, когда я просто ввести 1, то он показывает сообщение об ошибке, как исправить это, что метод должен быть вызван после ввода complte номер версии 1.5 или 1.0, как этоКак вызвать метод UITextFiled Did Change в приложении iPhone

-(void)textFieldTextDidChangeClinicMarkup:(UITextField*)tf{ 

    NSString*test=clinicMarkupTextField.text; 


    if([test isEqualToString:@"1.0"]){ 
    NSString*[email protected]"1.0"; 

    appDelegate.clinicalMarkup=value; 


    } 

    else if([test isEqualToString:@"1.5"]){ 

    NSString*[email protected]"1.5"; 

    appDelegate.clinicalMarkup=value; 


    } 


    else if([test isEqualToString:@"2.0"]){ 

    NSString*[email protected]"2.0"; 

    appDelegate.clinicalMarkup=value; 


} 


else if([test isEqualToString:@"2.5"]){ 

    NSString*[email protected]"2.5"; 

    appDelegate.clinicalMarkup=value; 


} 


    else if([test isEqualToString:@"3.0"]){ 

    NSString*[email protected]"3.0"; 

    appDelegate.clinicalMarkup=value; 


    } 

    else{ 

    UIAlertView * alert = [[UIAlertView alloc] initWithTitle:@"Warning" message:@"Value Must be as prescribed " delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil]; 
    [alert show]; 
    [alert release]; 


    } 


} 
+0

может у объяснить ур вопрос немного больше о том, что именно вам нужно? –

+0

Используйте это - (BOOL) textField: (UITextField *) textField shouldChangeCharactersInRange: (NSRange) range replacementString: (NSString *) string delegate method –

+0

@safecase вы можете объяснить мне больше, я думаю, что это тоже то же самое, что и у меня – james

ответ

3
-(void)textFieldTextDidChangeClinicMarkup:(UITextField*)tf{ 

    NSString*test=clinicMarkupTextField.text; 


    if([test isEqualToString:@"1.0"]){ 
    NSString*[email protected]"1.0"; 

    appDelegate.clinicalMarkup=value; 


    } 

    else if([test isEqualToString:@"1.5"]){ 

    NSString*[email protected]"1.5"; 

    appDelegate.clinicalMarkup=value; 


    } 


    else if([test isEqualToString:@"2.0"]){ 

    NSString*[email protected]"2.0"; 

    appDelegate.clinicalMarkup=value; 


} 


else if([test isEqualToString:@"2.5"]){ 

    NSString*[email protected]"2.5"; 

    appDelegate.clinicalMarkup=value; 


} 


    else if([test isEqualToString:@"3.0"]){ 

    NSString*[email protected]"3.0"; 

    appDelegate.clinicalMarkup=value; 


    } 

    else if([test length] >=3 || [test floatValue] > 3 || [test floatValue] <1) { 

    UIAlertView * alert = [[UIAlertView alloc] initWithTitle:@"Warning" message:@"Value Must be as prescribed " delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil]; 
    [alert show]; 
    [alert release]; 


    } 


} 
+0

, когда я использую ваш код, он дает ошибку на длину – james

+0

извините. это было неправильно. см. это сейчас. Я отредактировал его – Saad

+0

Завершение приложения из-за неперехваченного исключения «NSInvalidArgumentException», причина: '- [__ NSCFString lenght]: нераспознанный селектор, отправленный в экземпляр 0x6884270' – james

0

Вы можете добавить наблюдатель за UITextFieldTextDidChangeNotification, что будет вызывать метод, когда значение UITextField.

[[NSNotificationCenter defaultCenter] 
       addObserver:self 
       selector:@selector(textFieldTextDidChangeClinicMarkup:) 
       name:UITextFieldTextDidEndEditingNotification 
       object:textFieldName]; 
+0

да, он вызывает метод вроде этого, но я должен был вызвать этот метод, когда я ввожу значение, например, когда я вхожу в 1, он показывает, что всплывающее окно не дает мне вводить полные значения 1.5 – james

+0

вместо UITextFieldDidChangeNotificatio u может использовать UITextFieldTextDidEndEditingNotification. – Musthafa

1

Вы не должны использовать valueDidChange событие для этого случая, потому что это событие будет срабатывать каждый раз, когда вы вносите изменения в текстовое поле, следует использовать UIControlEventEditingDidEnd вместо этого, это событие будет срабатывать, когда текстовое поле теряется фокус (resignFirstResponse)

0

Попробуйте UITextField делегат:

-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string 
{ 
    int currentTxtLen = [textField.text length] ; 
    if (currentTxtLen == 3) 
    { 
     if([textField.text isEqualToString:@"1.0"] || [textField.text isEqualToString:@"1.5"] || [textField.text isEqualToString:@"2.0"] || [textField.text isEqualToString:@"2.5"] || [textField.text isEqualToString:@"3.0"]) { 
     return YES; // Requied Output 
    } 
    return NO;// Not required Output 
} 
0

использовать это, его рабочий

- (void) textFieldDidEndEditing:(UITextField *)textField { 
      if([self validateValue:textField.text] != 1) 
      { 
       UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Invalid Value!!" message:@"Please press OK and enter again" delegate:self cancelButtonTitle:nil otherButtonTitles:@"OK", nil]; 
       [alert show]; 
       [alert release]; 
      } 
} 
- (BOOL) validateValue: (NSString *) candidate 
{ 

    NSString *valueRegex = @"[1-3]+.[0,5]{1}"; //change values here according to ur need 
    NSPredicate *valueTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", valueRegex]; 
    return [valueTest evaluateWithObject:candidate]; 
} 

надеюсь, что это поможет. счастливое кодирование :)

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