Frage

Zur Zeit habe ich eine Klasse bekommt UIAlertViews hier auftauchen und dort. Derzeit ist die gleiche Klasse die Delegierten für diese (es ist sehr logisch, dass es sein würde). Leider rufen diese UIAlertViews die gleichen Delegierten Methoden der Klasse. Nun, die Frage ist - wie Sie wissen, aus denen Warnungsansicht eine delegierte Methode aufgerufen wird? Ich dachte nur den Titel der Warnungsansicht prüft, aber das ist nicht so elegant. Was ist die eleganteste Art und Weise mehrere UIAlertViews zu behandeln?

War es hilfreich?

Lösung

Tag die UIAlertViews wie folgt aus:

#define kAlertViewOne 1
#define kAlertViewTwo 2

UIAlertView *alertView1 = [[UIAlertView alloc] init...
alertView1.tag = kAlertViewOne;

UIAlertView *alertView2 = [[UIAlertView alloc] init...
alertView2.tag = kAlertViewTwo;

und dann zwischen ihnen in den Delegatmethoden unterscheiden diese Tags verwenden:

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
    if(alertView.tag == kAlertViewOne) {
        // ...
    } else if(alertView.tag == kAlertViewTwo) {
        // ...
    }
}

Andere Tipps

FYI, wenn Sie nur iOS 4 Nutzer ausrichten möchten (was vernünftig Block für UIAlertViewDelegate

habe ich versucht, Zachary Waldowski des BlocksKit Rahmen für diese Verwendung. Seine seine Anweisungen zu folgen, um den BlocksKit Rahmen in mein Projekt zu importieren, aber leider ich konnte es nicht an der Arbeit.

So, wie Can Berk Güder schon sagt, habe ich verwendet UIAlertView Tags für jetzt. Aber irgendwann in der Zukunft werde ich versuchen, mit Blöcken zu bewegen (vorzugsweise eine, die ARC unterstützt aus der Box)!

einfacher und neuere

UIAlertView *alert = [[UIAlertView alloc] init...
alert.tag = 1;

UIAlertView *alert = [[UIAlertView alloc] init...
alert.tag = 2;



- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
    if(alertView.tag == 1) {
        // first alert...
    } else  {
        // sec alert...
    }
}

fertig!

Sie können diese ganze Tortur überwinden und verhindern, dass Sie sich von Tags mit von UIAlertView Verbesserung Block Rückrufe zu verwenden. Schauen Sie sich dieses Blog-Post ich zu diesem Thema geschrieben.

Ich habe immer Tags dachte verwendet, ist ein bisschen wie ein Hack. Wenn Sie sie verwenden, zumindest einige definiert Konstanten für die Tag-Nummern festgelegt.

Stattdessen verwende ich Eigenschaften wie folgt aus:

In dem Schnittstellenbereich:

@property (nonatomic, weak) UIAlertView *overDueAlertView;
@property (nonatomic, weak) UIAlertView *retryPromptAlertView;

Erstellen der Alarmansicht:

UIAlertView *alert = [[UIAlertView alloc] init...
self.overDueAlertView = alert;
[alert show];

Delegate-Methode:

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
  if (alertView == self.overDueAlertView) {
    // Overdue alert
  } else if (alertView == self.retryPromptAlertView) {
    // Retry alert
  }
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top