Question

Actuellement, j'ai une classe surgissant UIAlertViews ici et là. À l'heure actuelle, la même classe est le délégué pour ces (il est très logique que ce serait). Malheureusement, ces UIAlertViews appelleront les mêmes méthodes de délégués de la classe. Maintenant, la question est - comment savez-vous d'où une méthode vue d'alerte délégué est invoquée? Je pensais simplement vérifier le titre de l'affichage des alertes, mais ce n'est pas si élégant. Quelle est la manière la plus élégante de gérer plusieurs UIAlertViews?

Était-ce utile?

La solution

Tag les UIAlertViews comme ceci:

#define kAlertViewOne 1
#define kAlertViewTwo 2

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

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

puis se différencient entre eux dans les méthodes de délégué en utilisant ces balises:

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

Autres conseils

Pour votre information, si vous voulez cibler seulement iOS 4 utilisateurs (ce qui est raisonnable Bloc pour UIAlertViewDelegate

J'ai essayé d'utiliser le cadre de BlocksKit de Zachary Waldowski pour cela. Son ses instructions pour importer le cadre de BlocksKit dans mon projet, mais malheureusement Je ne pouvais pas le faire fonctionner.

Alors, comme Berk Güder suggère, je l'ai utilisé balises UIAlertView pour l'instant. Mais à un moment donné à l'avenir, je vais essayer de passer à l'aide de blocs (de préférence un qui prend en charge l'ARC de la boîte)!

plus facile et plus récent

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...
    }
}

tout fait!

Vous pouvez surmonter cette épreuve et vous empêcher d'utiliser des étiquettes en améliorant UIAlertView utiliser callbacks bloc. Consultez ce blog J'ai écrit sur le sujet.

Je l'ai toujours pensé que l'aide de balises est un peu un hack. Si vous les utilisez, au moins à certaines constantes définies pour les numéros d'étiquette.

Au lieu de cela, j'utilise des propriétés comme ceci:

Dans la section d'interface:

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

Création de la vue d'alerte:

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

Méthode de délégué:

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
  if (alertView == self.overDueAlertView) {
    // Overdue alert
  } else if (alertView == self.retryPromptAlertView) {
    // Retry alert
  }
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top