2017-12-06 1 views
0

Ich möchte Alert vor dem Text im Textfeld eingeben nach OK Schaltfläche klicken Textfeld wird bearbeitbar sein, aber ich zeige Alert, aber Textfeld konnte nicht bearbeitet werden.UIAlertcontroller in TextfieldShouldBeginediting objective-c

if(textField == contractValueField) 
{ 
    [self showAlertWithTitle:@"Information" textfield:contractValueField]; 
    return YES; 
} 

Ich suche so viele Websites, aber ich habe nicht richtige Antwort unter Verwendung UIAlertView es funktioniert, aber ich will UIAlertController verwenden. Ich habe mehr als 20 Textfelder in meinem Projekt & jedes Textfeld, das ich Warnung vor Bearbeitungsbeginn anzeigen werde.

- (void)showAlertWithTitle:(NSString *)title textfield:(UITextField*)textfield 
{ 
    UIAlertController *alert = [UIAlertController alertControllerWithTitle:title message:@"Please enter Amount in Lakhs" preferredStyle:UIAlertControllerStyleAlert]; 
    UIAlertAction* ok = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:^(UIAlertAction * action) 
    { 
     [alert dismissViewControllerAnimated:YES completion:nil]; 
     [textfield becomeFirstResponder]; 
    }]; 

    [alert addAction:ok]; 
    [self.navigationController presentViewController:alert animated:YES completion:nil]; 
} 
+0

ist Ihr showAlertWithTitle ausgewählt worden zeigen wollte: Methode aufgerufen wird ?. –

+0

ja, es ruft aber Textfeld hat nicht bearbeitet werden, nachdem drücken ok – narasimha

+0

nur versuchen, [self presentViewController], ich glaube, das ist es nicht –

Antwort

1

Der Grund dafür ist, dass, wenn Sie [textfield becomeFirstResponder] nennen, -(BOOL)textFieldShouldBeginEditing:(UITextField *)textField auch wieder genannt wird, was wiederum zeigt Ihre Alertview, und wenn die OK-Taste für Ihre Warnung aktiviert ist, wird die Alarmansicht wieder angezeigt, und Sie sind in einer Schleife stecken. Hier ist ein schneller Weg, es zu beheben:

-(BOOL)textFieldShouldBeginEditing:(UITextField *)textField{ 
    // check to see if the alert has already been shown, if it has the tag value will be 1 
    if (textField == contractValueField && textField.tag != 1) { 
     [self showAlertWithTitle:@"Information" textfield:textField]; 
     return false; 
    } 
    return true; 
} 

Der Code für Ihren Alertview sollte wie folgt lauten:

- (void)showAlertWithTitle:(NSString *)title textfield:(UITextField*)textfield{ 
    UIAlertController *alert = [UIAlertController alertControllerWithTitle:title message:@"Please enter Amount in Lakhs" preferredStyle:UIAlertControllerStyleAlert]; 
    UIAlertAction* ok = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:^(UIAlertAction * action){ 
     textfield.tag = 1; 
     [alert dismissViewControllerAnimated:YES completion:nil]; 
     [textfield becomeFirstResponder]; 
    }]; 

    [alert addAction:ok]; 
    [self presentViewController:alert animated:true completion:nil]; 
} 

Rückkehr des Variablenwert von Textfield zurück auf 0, wenn die Bearbeitung beendet ist:

-(BOOL)textFieldShouldEndEditing:(UITextField *)textField{ 
    textField.tag = 0; 
    return true; 
} 
+0

zum ersten Mal zeigt es Warnung ich werde den Text auch bearbeiten, aber ich klicke auf ein anderes Textfeld, dann zurück & klicken Sie auf dieses Textfeld es hat keine Warnung angezeigt. Ich möchte jedes Mal anzeigen, wenn Textfield angeklickt wird, wird der Alarm angezeigt und dann bearbeitet. – narasimha

+0

Bitte sehen Sie die Änderungen – Shayno

+0

Vielen Dank, es funktioniert. Gibt es einen anderen Weg, wie wir ohne Tags wie - textfield.selcted = yes; – narasimha

0

Deklarieren eine UITextField dem die letzte ausgewählte Textfield Referenz wird:

@interface ViewController(){ 
    UITextField *lastSelectedTextField; 
} 

-(BOOL)textFieldShouldBeginEditing:(UITextField *)textField{ 
    // check to see if the textField is the last shown textField 
    if (textField == lastSelectedTextField) { 
     return true; 
    } 
    [self showAlertWithTitle:@"Information" textfield:textField]; 
    return false; 
} 


- (void)showAlertWithTitle:(NSString *)title textfield:(UITextField*)textfield{ 
    UIAlertController *alert = [UIAlertController alertControllerWithTitle:title message:@"Please enter Amount in Lakhs" preferredStyle:UIAlertControllerStyleAlert]; 
    UIAlertAction* ok = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:^(UIAlertAction * action){ 
     lastSelectedTextField = textfield;; 
     [alert dismissViewControllerAnimated:YES completion:nil]; 
     [textfield becomeFirstResponder]; 
    }]; 

    [alert addAction:ok]; 
    [self presentViewController:alert animated:true completion:nil]; 
} 

Dies würde die bessere Option sein, habe ich nicht erkennen, dass Sie die Warnung jeder selbst wenn das Textfeld ein zuvor

+0

hinzufügen, aber ich werde nicht in der Lage sein, diesen Code zu verwenden, weil ich einige Textfelder habe, wird false zurückgeben; – narasimha

+0

Ich denke, Sie sollten in der Lage sein, eine weitere 'else if() 'Anweisung zu' textFieldShouldBeginEditing' hinzuzufügen, aber es ist ein bisschen schwierig, weiter zu helfen, ohne mehr über Ihr Projekt zu lernen und wie es funktioniert ... – Shayno

+0

Danke Sie sehr für Ihre schnellen Antworten. Ich habe einen anderen versucht, wenn es sonst() funktioniert. – narasimha

Verwandte Themen