Pregunta

Actualmente tengo una clase apareciendo UIAlertViews aquí y allá. En la actualidad, la misma clase es el delegado de éstos (que es muy lógico que sería). Por desgracia, estos UIAlertViews llamarán los mismos métodos de delegado de la clase. Ahora, la pregunta es - ¿cómo se sabe desde qué punto de vista de alerta se invoca un método delegado? Estaba pensando sólo la comprobación del título de la vista alerta, pero que no es tan elegante. ¿Cuál es la forma más elegante de manejar varios UIAlertViews?

¿Fue útil?

Solución

Tag las UIAlertViews como esta:

#define kAlertViewOne 1
#define kAlertViewTwo 2

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

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

y luego diferenciar entre ellos en los métodos de delegado utilizando las siguientes etiquetas:

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

Otros consejos

Para su información, si desea orientar solo IOS 4 usuarios (lo cual es razonable ahora que ~ 98,5% de los clientes tienen al menos iOS 4 instalado ), usted debe ser capaz de utilizar los bloques para hacer muy agradable en línea manejo de UIAlertViews.

He aquí una pregunta Stackoverflow explicarla:
Bloque de UIAlertViewDelegate

He intentado utilizar BlocksKit marco de Zachary Waldowski para esto. Su UIAlertView (BlocksKit) referencia de la API se veía muy bien. Sin embargo, traté de seguir sus instrucciones para importar el marco BlocksKit en mi proyecto, pero por desgracia no pude conseguir que funcione.

etiquetas

UIAlertView Así que, como sugiere Can Berk Güder, que he usado por ahora. Pero en algún momento en el futuro voy a tratar de mover a la utilización de bloques (preferiblemente uno que es compatible con ARC fuera de la caja)!

más fácil y más reciente

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 hecho!

Usted puede superar esta prueba dura entera y evitarse que el uso de etiquetas mediante la mejora de UIAlertView utilizar devoluciones de llamada de bloque. Echa un vistazo a esta entrada del blog he escrito sobre el tema.

Siempre he pensado que el uso de etiquetas es un poco de un truco. Si usted hace uso de ellos, al menos mencionar algunas constantes definidas para los números de etiqueta.

En su lugar, yo uso las propiedades de esta manera:

En la sección de interfaz:

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

Creación de la vista de alertas:

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

método Delegado:

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
  if (alertView == self.overDueAlertView) {
    // Overdue alert
  } else if (alertView == self.retryPromptAlertView) {
    // Retry alert
  }
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top