2011-09-09 54 views
7

我正在編程一些按鈕,並試圖爲每個按鈕設置一個動作,但我似乎無法使其工作。Objective-c:NSButton setAction不起作用

在我AppController.h我有這樣的代碼:

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

- (IBAction) zoomIn : (id) sender; 

- (IBAction) zoomOut : (id) sender; 

和AppController.m的awakeFromNib方法中:

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

我無法弄清楚爲什麼我的setAction即使使用setTarget也無法正常工作。

的問題是我已經子類NSButton和推翻onMouseDown,忘了叫super.onMouseDown