2011-09-09 22 views
7

Programatik olarak birkaç düğmeyi yapıyorum ve her birine bir eylem ayarlamaya çalışıyorum ama işe yaramayabilirim. Benim AppController.h olarakObjective-c: NSButton setAction çalışmıyor

Bu kodu vardır:

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

ve awakeFromNib yöntemi içinde

- (IBAction) zoomIn : (id) sender; 

- (IBAction) zoomOut : (id) sender; 

ve AppController.m içinde

:

/*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]; 

ve

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

- (IBAction) zoomOut : (id) sender { 
    NSLog(@"zoom out!"); 
} 
ZoomOut ve Zoomin ama basmayın

...

+4

yanı 'target' ayarlamayı deneyin aramayı unuttum etmişti oldu. – PengOne

+0

ARC veya GC kullanmıyorsanız, görüntüleri ve düğmeleri serbest bıraktığınızı veya otomatik olarak açtığınızı unutmayın. –

cevap

28

en olası nedeni bu eylemlere yanıt responder chain for action messages hiçbir nesne yoktur olmasıdır. Bir eylem belirttiğinizde ancak bir hedef belirtmediğinizde, Kakao yanıtlayıcı zincirini geçerek bu eylem iletilerine yanıt veren bir nesne bulmaya çalışır.

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

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

ben çözemedim:

Ya o nesneye bir başvuru varsa, bu eylemlerin hedefi olarak belirtin, cevap zincirinde uygun bir nesne varsa veya emin olun neden setAction benim setTarget ile çalışmadı.

Sorunum NSButton sınıflandırma ve onMouseDown overrode ve super.onMouseDown

İlgili konular