Hay algunas buenas maneras de hacerlo. Los dos más comúnmente implementados serían tener al controlador (quién recibe la acción) conocer a los posibles remitentes, o hacer que el remitente tenga un método que termine usando para determinar el comportamiento adecuado.
La primera (mi manera preferible, pero es fácil argumentar lo contrario) se implementarían como tales:
@interface Controller : NSObject {
UIButton *_replyToSender;
UIButton *_replyToAll;
}
- (void)buttonClicked:(id)sender;
@end
@implementation Controller
- (void)buttonClicked:(id)sender {
if (sender == _replyToSender) {
// reply to sender...
} else if (sender == _replyToAll) {
// reply to all...
}
}
@end
La segunda manera se llevaría a cabo de tal manera que:
typedef enum {
ReplyButtonTypeSender = 1,
ReplyButtonTypeAll,
} ReplyButtonType;
@interface Controller : NSObject {
}
- (void)buttonClicked:(id)sender;
@end
@interface MyButton : UIButton {
}
- (ReplyButtonType)typeOfReply;
@end
@implementation Controller
- (void)buttonClicked:(id)sender {
// You aren't actually assured that sender is a MyButton, so the safest thing
// to do here is to check that it is one.
if ([sender isKindOfClass:[MyButton class]]) {
switch ([sender typeOfReply]) {
case ReplyButtonTypeSender:
// reply to sender...
break;
case ReplyButtonTypeAll:
// reply to all...
break;
}
}
}
@end
bueno, esto es exactamente lo que quería ... añadiendo la etiqueta funciona bien, pero en el controlador, donde se define la función responseAll { NSInteger * tid = (* NSInteger) sender.tag; } da un error que dice "solicitud de etiqueta miembro en algo que no es una estructura o unión" :( – Vijayeta
Gracias por aclarar esto, Rob. Yo estaba tratando de averiguar exactamente cómo iba a lograr el mismo comportamiento Vijayeta estaba buscando. @Vijayeta: El remitente es el botón en sí, así que creo que debe probar "((UIControl *) remitente) .tag;". Tenga en cuenta que debe encerrar el objeto entre paréntesis antes de poder acceder al propiedad de etiqueta. – LucasTizma
@Vijayeta: '.tag' es un número entero, no un puntero a un número entero.' NSInteget tid = sender.tag' – user102008