のアクションとして C 関数を使用することはできませんNSButton
。ボタンには、オブジェクトであるターゲットと、そのターゲットのメソッドのセレクターが必要です。ターゲットがない場合でも、セレクターに応答するウィンドウのレスポンダー チェーンにオブジェクトが存在する必要があります。
ボタンを操作するには、オブジェクトを作成する必要があります (インスタンスである必要はありません。必要に応じてクラス オブジェクトを使用できます)。メソッドには特定の署名も必要です。引数を 1 つ取る必要があります。これは、呼び出されたときにボタンになります。
既に作成した関数を使用する必要がある場合は、アクション メソッドからそれを呼び出す ObjC クラスを作成する必要があります。
#import <Cocoa/Cocoa.h>
@interface ButtonPasser : NSObject
+ (IBAction)buttonPassthrough:(id)sender;
@end
@implementation ButtonPasser
+ (IBAction)buttonPassthrough:(id)sender
{
buttonClick();
}
@end
void start(void){
...
NSRect buttonFrame = NSMakeRect(59, 33, 82, 32);
NSButton *button = [[NSButton alloc] initWithFrame:buttonFrame];
[button setTarget:[ButtonPasser class]];
[button setAction:@selector(buttonPassthrough:)];
...
}
これはクラス オブジェクトとクラス メソッドを使用します。これは、インスタンスを作成した後でそのインスタンスをどうするかわからないためです。ただし、インスタンスを使用する方がはるかに一般的です。