Ich möchte den 'Speichern'-Button in meinem UIAlertView selektiv aktivieren, damit Sie keine Datei ohne Namen speichern können. Ich kann Textänderungsereignisse für das angehängte UITextView (der Stil ist UIAlertViewStylePlainText) mithören, aber ich kann nicht sehen, wie ich auf die Schaltflächen zugreifen kann, um die Aktivierung/Deaktivierung durchzuführen. Ich habe versucht, mit [alertView subviews] zu iterieren, aber da ist nur das Label drin (keine Schaltflächen). Wo muss ich suchen, um direkt auf die an einen UIAlertView angefügten UIButtons zuzugreifen?
Antworten
Zu viele Anzeigen?Einfach, implementieren Sie einfach das UIAlertViewDelegate in Ihrer Klasse und nutzen Sie die alertViewShouldEnableFirstOtherButton:
Delegatenmethode. Sie können dies verwenden, um die Länge des Textfelds zu überprüfen und den Button entsprechend zu aktivieren...
- (BOOL)alertViewShouldEnableFirstOtherButton:(UIAlertView *)alertView
{
return [[[alertView textFieldAtIndex:0] text] length] > 0;
}
Vergewissern Sie sich, dass Sie Ihren ViewController in Ihrer Schnittstelle so einstellen, dass er diesem Delegaten entspricht, indem Sie < UIAlertViewDelegate >
verwenden und diese Klasse als Delegaten für die Alarmeinstanz festlegen.
Instanziieren Sie Ihren AlertView:
UIAlertView *av = [UIAlertView alloc] initWithTitle:@"Mein Titel" message:@"Nachricht" delegate:self cancelButtonTitle:@"Abbrechen" otherButtonTitles:@"Speichern", nil];
});
Stellen Sie dann sicher, dass Ihre Klasse UIAlertViewDelegate implementiert und suchen Sie nach dem Index des Buttons, den Sie überwachen möchten:
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{
if (buttonIndex==1) {
//hier speichern
}
}
0x7fffffff hat die richtige Antwort gepostet, aber wenn jemand nach der Antwort sucht, wie man dieses Textfeld und die Schaltfläche zum Speichern zum UIAlertView hinzufügt, hier ist die Antwort:
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Speichern" message:@"" delegate:self cancelButtonTitle:@"Abbrechen" otherButtonTitles:@"Speichern", nil];
[alert setAlertViewStyle:UIAlertViewStylePlainTextInput];
Diese Delegatenmethode:
- (BOOL)alertViewShouldEnableFirstOtherButton:(UIAlertView *)alertView {
return [[[alertView textFieldAtIndex:0] text] length] > 0;
}
funktioniert nicht, wenn Sie diese Speichern-Schaltfläche mit der Methode addButtonWithTitle:
hinzufügen.
Und wenn die Speichern-Schaltfläche geklickt wird, wird diese Delegatenmethode aufgerufen und hier können Sie lesen, was der Benutzer in dieses Textfeld geschrieben hat:
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
if(buttonIndex == 1) {
// Speichern-Schaltfläche geklickt
NSLog(@"%@", [[alertView textFieldAtIndex:0] text]);
}
}