style alertas ios iphone delegates uialertview uialertviewdelegate

ios - alertas - uialertcontroller styles



Varios UIAlertViews para un delegado (5)

Actualmente tengo una clase UIAlertView s aquí y allá. Actualmente, la misma clase es el delegado de estos (es muy lógico que lo sea). Desafortunadamente, estos UIAlertView s llamarán a los mismos métodos de delegado de la clase. Ahora, la pregunta es: ¿cómo saber de qué vista de alerta se invoca un método de delegado? Estaba pensando en solo comprobar el título de la vista de alerta, pero eso no es tan elegante. ¿Cuál es la forma más elegante de manejar varias UIAlertView s?


Etiqueta el UIAlertView s así:

#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 métodos de delegado usando estas etiquetas:

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


Para su información, si quiere apuntar solo a usuarios de iOS 4 (lo cual es razonable ahora que ~ 98.5% de los clientes tienen al menos iOS 4 instalado ), debería poder usar Bloques para realizar un manejo en línea realmente bueno de UIAlertViews.

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

Intenté usar el framework BlocksKit de Zachary Waldowski para esto. Su referencia de API UIAlertView (BlocksKit) se veía muy bien. Sin embargo, intenté seguir sus instrucciones para importar el marco de BlocksKit a mi proyecto, pero desafortunadamente no pude hacerlo funcionar.

Entonces, como sugiere Can Berk Güder, por ahora he usado UIAlertView etiquetas UIAlertView . ¡Pero en algún momento en el futuro intentaré utilizar los Bloques (preferiblemente uno que admita ARC fuera de la caja)!


Puede superar todo este calvario y evitar el uso de etiquetas al mejorar UIAlertView para usar devoluciones de llamada en bloque. Echa un vistazo a esta entrada de blog que escribí sobre el tema.


Siempre he pensado que usar etiquetas es un poco pirateado. Si los usa, al menos configure algunas constantes definidas para los números de etiqueta.

En su lugar, uso propiedades como esta:

En la sección de interfaz:

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

Creando la vista de alerta:

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

Método del delegado:

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


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!