2010-03-22 4 views
12

Das UIAlertViewDelegate Protokoll definiert zwei Methoden, alertView:clickedButtonAtIndex: und alertView:didDismissWithButtonIndex:, die mir in der Nützlichkeit identisch erscheinen.UIAlertViewDelegate clickedButtonAtIndex: Nützlichkeit?

Warum gibt es eine clickedButtonAtIndex und eine didDismissButtonWithIndex wenn beide das gleiche tun? Ich weiß, es gibt auch eine willDismissButtonWithIndex, die passiert, bevor die Warnmeldung abgewiesen wird, aber gibt es einen Grund, clickedButtonAtIndex statt didDismissButtonWithIndex zu verwenden?

Antwort

19

fand ich ein nützlicher Unterschied zwischen den beiden:

Wenn ein UIAlertView zeigt, und das Gerät geht zu schlafen, alertView:didDismissWithButtonAtIndex: aufgerufen wird, obwohl die Alarmansicht nicht tatsächlich abgewiesen. Es wird wieder angezeigt, sobald das Gerät aufwacht. alertView:clickedButtonAtIndex: wird nur aufgerufen, wenn der Benutzer auf eine der Schaltflächen klickt.

12

Die alertView:clickedButtonAtIndex: wird aufgerufen, wenn der Benutzer auf eine Schaltfläche in einer Warnmeldungsansicht klickt, während alertView:didDismissWithButtonIndex: aufgerufen wird, nachdem eine Warnmeldungsansicht vom Bildschirm ausgeblendet wurde. (Siehe die UIAlertViewDelegate Protocol Reference.)

Der Unterschied ist minimal, aber es ermöglicht Ihnen, etwas vor oder nach der Animation zu tun.

+2

WillDismissWithButtonIndex-Methode sieht vollständig identisch mit clickedButtonAtIndex: dann ... – Vladimir

+1

Ja, aber es gibt einen kleinen Unterschied. Einer ist ein Anruf, wenn der Benutzer eine Taste gedrückt hat (so dass der Alarm immer sichtbar ist) und der andere ist ein Anruf, wenn der Alarm verschwunden ist. Wenn Sie beispielsweise einen Wechsel zwischen zwei Ansichten durchführen möchten, sollten Sie dies besser tun, wenn die Warnung in "alertView: didDismissWithButtonIndex:" geschlossen wurde. –

+1

Aber gibt es einen Grund, clickedButtonAtIndex über willDismissWithButtonIndex (nicht didDismiss) oder umgekehrt zu verwenden? –

1

Wenn die Warnmeldungsanzeige aus irgendeinem Grund verschwindet (einschließlich durch eine andere UIAlertView abgedeckt, in den Ruhezustand versetzt wird usw.), wird didDismissWithButtonAtIndex: aufgerufen. Dies kann bedeuten, dass die Methode aufgerufen werden kann, ohne dass der Benutzer auf etwas klicken muss. Dies kann zu unerwartetem Verhalten führen, wenn Sie davon abhängig sind, dass dieser Delegat-Callback als Reaktion darauf aufgerufen wird, dass der Benutzer tatsächlich auf eine Schaltfläche klickt. In diesem Fall ist clickedButtonAtIndex: nützlicher.

1

Ich kann nicht mit der Warnungsansicht, die auf iOS durch Sperren meines Geräts Eds Verhalten reproduzieren 7.

jedoch der wichtigsten Unterschied zwischen alertView:clickedButtonAtIndex:, alertView:didDismissWithButtonIndex: und alertView:willDismissWithButtonIndex: ist, dass die erste Methode (clickedButtonAtIndex:) ist nur Wird aufgerufen, wenn der Benutzer explizit auf eine Schaltfläche in Ihrer Alert-Ansicht klickt (daher 'angeklickt').

Ist es möglich, dass eine Warnmeldung ohne Klicken auf eine Schaltfläche beendet wird? Ja, Sie können eine Warnmeldungsansicht mithilfe der UIAlertView-Methode dismissWithClickedButtonIndex:animated: programmgesteuert ausblenden.

Wenn also ein Verhalten immer ausgelöst werden muss, wenn die Warnmeldungsansicht nicht mehr angezeigt wird - egal, ob der Benutzer auf eine Schaltfläche klopft oder programmgesteuert ausgelöst wird -, ist die Verwendung von didDismissWithButtonIndex: und willDismissWithButtonIndex: sinnvoller.

Verwandte Themen