Frage

Ich schreibe ein Stück Code zu "do etwas-> zeigen alert1-> do etwas-> zeigen alert 2".


    //do something
    UIAlertView *alert = [[UIAlertView alloc] 
                          initWithTitle:@"Alert 1" 
                          message:nil 
                          delegate:nil 
                          cancelButtonTitle:@"OK" 
                          otherButtonTitles:nil];
    [alert show];
    [alert release];
    //do something  
    UIAlertView *alert2 = [[UIAlertView alloc] 
                           initWithTitle:@"Alert 2" 
                           message:nil 
                           delegate:nil 
                           cancelButtonTitle:@"OK" 
                           otherButtonTitles:nil];
    [alert2 show];
    [alert2 release];

Und plötzlich geschah etwas Seltsames an mehrere AlertViews: Es zeigt "Alarm 1" -> "Alert 2" (Drücken Sie auf 'OK') -> "Alarm 1". Warum „Alarm 1“ zeigt wieder? Ich habe keine Delegatmethode noch geschrieben. Vielleicht ein Fehler? (Danke an cobbal, alert 1 ist immer noch da, wenn alert 2 erscheint.)

Ich finde - (void) Alertview: (UIAlertView *) Alertview clickedButtonAtIndex: (NSInteger) buttonIndex funktioniert gut. Ist der Delegatmethode ein gemeinsamer Weg mehrere alertViews zu zeigen?

War es hilfreich?

Lösung

Ich würde vermuten, dass alert 1 gezeigt wird, und dann durch Alarm 2 abgedeckt, da Show ist nicht modal. Wenn Alarm 2 geschlossen ist, Alarm 1 ist noch offen.

Um Ihre zweite Frage, alertView:didDismissWithButtonIndex: kann besser arbeiten, aber ich habe nicht wirklich, dass getestet.

Andere Tipps

Der Beauftragte ist so, dass Sie benachrichtigt werden kann, wenn die Warnung des Feldes verwiesen, und die Taste, um es verwendet wurde zu entlassen. Es hat keinen Einfluss, ob die Warnung überhaupt das Feld verwiesen.

Der Alarm bleibt sichtbar, bis er entlassen wird entweder durch eine Taste tippen. (Falls vorhanden - sie nicht benötigt werden) oder Sie entweder [UIAlertView dismissWithClickedButtonIndex:animated] oder (undokumentiert) dismiss Methode der Alarminstanz aufrufen

Es sieht aus wie (wie Cobbal vorgeschlagen), Alarm 2 über Alarm Aufspringen 1, Sie Alarm 2 entlassen, und alert 1 bleibt (bis er sich des Feldes verwiesen).

Gibt es einen bestimmten Grund, warum Sie eine neue Warnung angezeigt werden soll, während ein anderer noch zeigt? Vielleicht etwas mehr Kontext würde uns helfen, an die Wurzel des Problems zu bekommen, was ich vermute, kann ein Design-Problem sein.

[Bearbeiten] zurück zu kommender und Lesen wieder frage ich mich, ob das, was Sie fragen, um mit dem Delegatmethode, ob Sie von dort 2 Alarm zeigt werden sollen? In diesem Fall, das ist wahrscheinlich das, was Sie wollen - ob direkt oder indirekt. Durch indirekt meine ich, dass Sie an anderer Stelle gesetzt etwas Zustand haben können, ob Alarm 2 bestimmt, soll (oder die Umstände, die dazu führen können) angezeigt. Dieser Zustand (ein Flag, vielleicht) könnte eingestellt werden, wenn Sie den ersten Alarm zeigen, und gelöscht, wenn der Alarm (vom Delegatmethode) das Feld verwiesen.

Der Grund, warum dies passiert ist, weil UIAlertView nicht blockiert, während es zeigt. Jeder Code geschrieben, nachdem ein Alertview zeigt läuft gerade nach dem Alarm angezeigt wird.

Was sollten Sie haben zwei verschiedene Methoden. Einer, der etwas tut, und dann zeigt eine Warnung, und dann eine andere, die etwas tut, und zeigt einen weiteren Alarm.

die erste Methode Kick off etwas zu tun, und eine Warnung zu zeigen, und dann in den Alarm des Delegatmethode Haken, und wenn Sie den Rückruf von der Alertview erhalten, die andere Methode ausgeführt werden.

Auf diese Weise wird der zweite Teil des Prozesses nicht passieren, bis der Benutzer auf dem Alarm OK in dem ersten Teil des Prozesses gedrückt hat.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top