IBAction
- это директива препроцессора, которая сообщает Interface Builder «это то, о чем вы должны знать». Это на самом деле оценивается в void
. Это означает, что «действия» - это обычные методы, которые вы можете вызывать обычным способом:
[target someMethod:self];
Если вы хотите имитировать поведение, которое вы можете получить от NSButton
, вы можете добавить выход для цели и свойство для селектора (в виде строки):
@property (nonatomic, retain) IBOutlet id target;
@property (nonatomic, retain) NSString* actionSelectorString;
Который вы могли бы затем назвать так:
SEL action = NSSelectorFromString(self.actionSelectorString);
[self.target performSelector:action withObject:self];
Если вы хотите, чтобы ваш класс подключал селектор с помощью перетаскивания в Интерфейсном Разработчике, самый простой способ - сделать ваш класс подклассом NSControl
(перетащите пользовательский вид из библиотеки объектов, Command- 6, чтобы показать инспектора, выберите свой класс в верхнем всплывающем окне). Затем вы можете «вызвать» действие:
- (void) go {
[self sendAction:self.action to:self.target];
}