2011-09-09 11 views
7

私はいくつかのボタンをプログラム的に作成し、それぞれにアクションを設定しようとしていますが、動作させることができません。私AppController.hでObjective-c:NSButton setActionが機能しない

私はこのコードを持っている:

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

とawakeFromNibメソッド内

- (IBAction) zoomIn : (id) sender; 

- (IBAction) zoomOut : (id) sender; 

と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

が同様に 'target'を設定してみてください呼び出すのを忘れていたでした。 – PengOne

+0

ARCまたはGCを使用していない場合は、画像とボタンを放すか、自動解放してください。 –

答えて

28

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

どちらかあなたはレスポンダチェーンに適したオブジェクトを持っているか、あなたはそのオブジェクトへの参照を持っている場合、これらのアクションの対象として指定していることを確認してください:

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

[btnZoomOut setAction:@selector(zoomOut:)]; 
[btnZoomOut setTarget:objectThatRespondsToZoomOut]; 
0

私は把握できませんでしたなぜ私のsetActionsetTargetでも動作しませんでした。

問題は、私はNSButtonをサブクラス化し、onMouseDownをオーバーライドし、super.onMouseDown