我正在以编程方式创建几个按钮,并尝试为每个按钮设置一个 Action ,但似乎无法使其正常工作。

在我的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不会被击中...

最佳答案

最可能的原因是responder chain for action messages中没有对象响应这些 Action 。当您指定 Action 但未指定目标时,Cocoa会尝试通过遍历响应者链来找到对这些 Action 消息做出响应的对象。

请确保您在响应者链中有一个合适的对象,或者,如果您有对该对象的引用,请将该对象指定为这些操作的目标:

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

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

10-08 08:27
查看更多