Varios UIAlertViews para un delegado

Actualmente tengo una class apareciendo UIAlertView s aquí y allá. Actualmente, la misma class es el delegado de estos (es muy lógico que así sea). Desafortunadamente, estos UIAlertView s llamarán a los mismos methods delegates de la class. Ahora, la pregunta es: ¿cómo sabes de qué vista de alerta se invoca un método de delegado? Estaba pensando simplemente en verificar el título de la vista de alerta, pero eso no es tan elegante. ¿Cuál es la forma más elegante de manejar varios UIAlertView s?

    UIAlertView el UIAlertView esta manera:

     #define kAlertViewOne 1 #define kAlertViewTwo 2 UIAlertView *alertView1 = [[UIAlertView alloc] init... alertView1.tag = kAlertViewOne; UIAlertView *alertView2 = [[UIAlertView alloc] init... alertView2.tag = kAlertViewTwo; 

    y luego diferenciarlos en los methods de delegado que usan estas tags:

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

    Para su información, si desea segmentar solo usuarios de iOS 4 (lo cual es razonable ahora que ~ 98.5% de los clientes tienen al less iOS 4 instalado ), debería poder usar Blocks para hacer un manejo en línea realmente agradable de UIAlertViews.

    Aquí hay una pregunta sobre Stackoverflow que lo explica:
    Bloque para UIAlertViewDelegate

    Traté de usar el marco BlocksKit de Zachary Waldowski para esto. Su reference API de UIAlertView (BlocksKit) se veía muy bien. Sin embargo, traté de seguir sus instrucciones para importar el marco de BlocksKit en mi proyecto, pero desafortunadamente no pude lograr que funcionara.

    Entonces, como sugiere Can Berk Güder, he usado tags UIAlertView por ahora. Pero en algún momento en el futuro voy a tratar de pasar a usar bloques (¡preferiblemente uno que sea compatible con ARC desde el principio)!

    más fácil y más nuevo

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

    ¡todo listo!

    Puede superar todo este calvario y evitar el uso de tags mediante la mejora de UIAlertView para utilizar callbacks de bloque. Mira esta publicación de blog que escribí sobre el tema.

    Siempre he pensado que usar tags es un truco. Si los usa, al less configure algunas constantes definidas para los numbers de las tags.

    En cambio, uso properties como esta:

    En la sección de la interfaz:

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

    Crear la vista de alerta:

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

    Método de delegado:

     - (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex { if (alertView == self.overDueAlertView) { // Overdue alert } else if (alertView == self.retryPromptAlertView) { // Retry alert }