10

我正在以编程方式制作几个按钮并尝试为每个按钮设置一个操作,但我似乎无法让它工作。

在我的 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

4 回答 4

30

最可能的原因是响应者链中没有响应这些动作的动作消息的对象。当您指定一个动作但未指定目标时,Cocoa 会尝试通过遍历响应者链来找到响应这些动作消息的对象。

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

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

[btnZoomOut setAction:@selector(zoomOut:)];
[btnZoomOut setTarget:objectThatRespondsToZoomOut];
于 2011-09-09T18:11:47.173 回答
1

问题的另一个原因可能是按钮(或创建按钮的包含类(或创建创建按钮的包含类的包含类))未存储并超出范围。

如果您在 ie viewDidLoad 中的按钮上调用 onClick() 并且该方法有效,但之后手动单击该按钮不起作用,那么这就是您的问题。

于 2018-11-08T20:15:00.040 回答
0

我无法弄清楚为什么我setAction的工作甚至没有setTarget

问题是我已经继承NSButton和覆盖onMouseDown并且忘记打电话了super.onMouseDown

于 2016-04-19T20:42:14.767 回答
0

添加:

[btnZoomIn setTarget:self];
[btnZoomOut setTarget:self];
于 2019-01-13T10:52:20.193 回答