2011-09-09 53 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