Есть несколько хороших способов сделать это. Двумя наиболее часто используемыми способами было бы информирование контроллера (который получает действие) о возможных отправителях или наличие у самого отправителя метода, который вы в конечном итоге используете для определения правильного поведения.
Первый (мой предпочтительный способ, но легко утверждать обратное) будет реализован так:
@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
Второй способ будет реализован таким образом:
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