Actualmente tengo una clase emergente UIAlertView
s aquí y allá. Actualmente, la misma clase es la delegada para estos (es muy lógico que lo sea). Desafortunadamente, estos UIAlertView
s llamarán a los mismos métodos delegados de la clase. Ahora, la pregunta es: ¿cómo sabes desde qué vista de alerta se invoca un método delegado? Estaba pensando en revisar 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?Varios UIAlertViews para un delegado
Respuesta
Tag las UIAlertView
s como este:
#define kAlertViewOne 1
#define kAlertViewTwo 2
UIAlertView *alertView1 = [[UIAlertView alloc] init...
alertView1.tag = kAlertViewOne;
UIAlertView *alertView2 = [[UIAlertView alloc] init...
alertView2.tag = kAlertViewTwo;
y luego se diferencian entre ellos en los métodos de delegado mediante las siguientes etiquetas:
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
if(alertView.tag == kAlertViewOne) {
// ...
} else if(alertView.tag == kAlertViewTwo) {
// ...
}
}
FYI, si desea orientar solo IOS 4 usuarios (que es razonable now that ~98.5% of clients have at least iOS 4 installed), debería poder usar Blocks para hacer un buen manejo en línea de UIAlertViews.
He aquí una pregunta Stackoverflow explicarla:
Block for UIAlertViewDelegate
He intentado utilizar BlocksKit marco de Zachary Waldowski para esto. Su referencia UIAlertView(BlocksKit) API se veía realmente bien. Sin embargo, traté de seguir his instructions to import the BlocksKit framework en mi proyecto, pero desafortunadamente no pude hacerlo funcionar.
Así que, como sugiere Can Berk Güder, he usado etiquetas UIAlertView
por el momento. Pero en algún momento en el futuro voy a tratar de pasar a usar Blocks (preferiblemente uno que soporte ARC fuera de la caja).
Si usa iOS 8+, UIAlertController tiene métodos de delegado basados en bloques. –
Puede superar este suplicio y evitar el uso de etiquetas mejorando UIAlertView para utilizar devoluciones de llamadas en bloque. Echa un vistazo this blog post Escribí sobre el tema.
más fácil & nueva
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!
Perfecto, gracias! –
Siempre he pensado que usar etiquetas es un poco complicado. Si los usa, al menos establezca algunas constantes definidas para los números de etiqueta.
En su lugar, utilizar 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
}
- 1. Múltiples UIAlertViews en la misma vista
- 2. establecer un delegado para UIWebView
- 3. delegado para un objeto singleton
- 4. Usando un delegado para administrar dos UIActionSheets
- 5. cómo extender un protocolo para un delegado en el objetivo C, luego subclase un objeto para requerir un delegado conforme
- 6. Cómo convertir un delegado a un delegado idéntico?
- 7. ¿Qué señala un delegado?
- 8. Usando un delegado para llamar a un constructor
- 9. Usar un delegado anónimo para devolver un objeto
- 10. ¿Puede un objeto ser un delegado para delegados múltiples?
- 11. ¿Debo anclar un delegado anónimo?
- 12. Compruebe si un objeto es un delegado
- 13. delegado simple (delegado) frente a delegados de multidifusión
- 14. Un tipo de delegado general para manejar cualquier evento
- 15. expectativas en burlando de kiwi (IOS) para un delegado
- 16. ¿Hay un delegado disponible para las propiedades en C#?
- 17. ¿Cómo manejar un evento delegado solo para elementos secundarios?
- 18. ¿Cómo creo un delegado para una propiedad .NET?
- 19. Ejemplo super simple para un evento delegado en C# .net?
- 20. Comprobación de un MethodInfo contra un delegado
- 21. ¿Puede un delegado tener un parámetro opcional?
- 22. delegado resultados
- 23. ¿Qué es Delegado y Métodos de delegado
- 24. propiedad "asignar" y "retener" para delegado
- 25. reflexión para obtener la información Delegado
- 26. Str_replace para varios elementos
- 27. NSTextFieldCell Delegado?
- 28. Invocar un delegado en un hilo específico C#
- 29. ¿Hay un delegado que no sea un delegado de multidifusión en C#?
- 30. Mano abreviada para delegado [[UIApplication sharedApplication]]?
Ah , bonito. Aunque usaría un interruptor. :) – quano
por supuesto, un interruptor funcionaría también, pero nunca me gustó el interruptor. =) –
Gran respuesta. Pero eso me lleva a otra pregunta. ¿Por qué define kAlertViewOne 1 y kAlertViewRwo 2. ¿No podría usar simplemente en alertView.tag = 1 o alertView.tag = 2? ¿Esto se hace por alguna razón? – George