2011-09-09 27 views
7

Tôi đang thực hiện một vài nút lập trình và cố gắng đặt hành động cho từng nút nhưng tôi dường như không làm cho nó hoạt động.Mục tiêu-c: NSButton setHành động không hoạt động

Trong AppController.h của tôi, tôi có mã này:

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

- (IBAction) zoomIn : (id) sender; 

- (IBAction) zoomOut : (id) sender; 

và trong AppController.m trong phương pháp 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!"); 
} 

nhưng zoomOut và zoomIn không bị ảnh hưởng ...

+4

Hãy thử thiết lập 'target' là tốt. – PengOne

+0

Nếu bạn không sử dụng ARC hoặc GC, đừng quên phát hành hoặc tự động phát hành hình ảnh và các nút. –

Trả lời

28

Lý do có thể nhất là không có đối tượng nào trong số responder chain for action messages trả lời những hành động đó. Khi bạn chỉ định một hành động nhưng không chỉ định mục tiêu, Cocoa cố gắng tìm một đối tượng phản hồi các thông điệp hành động đó bằng cách đi qua chuỗi phản hồi.

Hoặc hãy chắc chắn rằng bạn có một đối tượng thích hợp trong chuỗi trả lời hoặc, nếu bạn có một tham chiếu đến đối tượng đó, xác định nó như là mục tiêu của những hành động này:

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

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

tôi không thể tìm ra lý do tại sao setAction của tôi không hoạt động ngay cả với setTarget.

Vấn đề là tôi đã subclassed NSButton và overrode onMouseDown và quên gọi super.onMouseDown

Các vấn đề liên quan