10

プログラムでいくつかのボタンを作成し、それぞれにアクションを設定しようとしていますが、機能しないようです。

私の AppController.h には、次のコードがあります。

...
IBOutlet NSButton* btnZoomIn;
IBOutlet NSButton* btnZoomOut;
...

- (IBAction) zoomIn : (id) sender; 

- (IBAction) zoomOut : (id) sender;

そして awakeFromNib メソッド内の AppController.m で:

/*zoom in and out buttons*/

//get the path to the image files
NSString* zoomInImgPath = [[NSBundle mainBundle] pathForResource:@"zoomIn" ofType:@"png"];
NSString* zoomOutImgPath = [[NSBundle mainBundle] pathForResource:@"zoomOut" ofType:@"png"];

//declare the NSImages
zoomInImg = [[NSImage alloc] initWithContentsOfFile:zoomInImgPath];
zoomOutImg = [[NSImage alloc] initWithContentsOfFile: zoomOutImgPath];

//button making!
//zoomIn
btnZoomIn = [[NSButton alloc] initWithFrame:NSMakeRect(1426.0, 920.0, 25.0, 25.0)];
[btnZoomIn setButtonType:NSMomentaryPushInButton];
[btnZoomIn setTitle:@""];
[btnZoomIn setToolTip:@"Zoom In"];
[btnZoomIn setImage:zoomInImg];
[btnZoomIn setAction:@selector(zoomIn:)];
[[mainWin contentView] addSubview:btnZoomIn];

//zoomOut
btnZoomOut = [[NSButton alloc] initWithFrame:NSMakeRect(1456.0, 920.0, 25.0, 25.0)];
[btnZoomOut setButtonType:NSMomentaryPushInButton];
[btnZoomOut setTitle:@""];
[btnZoomOut setToolTip:@"Zoom Out"];
[btnZoomOut setImage:zoomOutImg];
[btnZoomOut setAction:@selector(zoomOut:)];
[[mainWin contentView] addSubview:btnZoomOut];

- (IBAction) zoomIn : (id) sender  { 
    NSLog(@"zoom in!");
 }

 - (IBAction) zoomOut : (id) sender { 
    NSLog(@"zoom out!");
 }

しかし、zoomOutとzoomInはヒットしません...

4

4 に答える 4

30

最も可能性の高い理由は、それらのアクションに応答するアクション メッセージのオブジェクトがレスポンダー チェーンにないことです。アクションを指定してターゲットを指定しない場合、Cocoa はレスポンダー チェーンをたどって、それらのアクション メッセージに応答するオブジェクトを見つけようとします。

レスポンダー チェーンに適切なオブジェクトがあることを確認するか、そのオブジェクトへの参照がある場合は、それらのアクションのターゲットとして指定します。

[btnZoomIn setAction:@selector(zoomIn:)];
[btnZoomIn setTarget:objectThatRespondsToZoomIn];

[btnZoomOut setAction:@selector(zoomOut:)];
[btnZoomOut setTarget:objectThatRespondsToZoomOut];
于 2011-09-09T18:11:47.173 に答える
0

setActionでさえ動作しなかった理由がわかりませんでしたsetTarget

問題は、サブクラス化NSButtonしてオーバーライドonMouseDownし、呼び出すのを忘れていたことですsuper.onMouseDown

于 2016-04-19T20:42:14.767 に答える