MyNSImageView是NSImageView的一個子類,在這裏我有:鼠標事件處理程序
@interface MyNSImageView : NSImageView
{
}
@end
@implementation MyNSImageView
//- (void) mouseDown: (NSEvent *) theEvent
//{
// do not wish to implement mouseDown event handler from here
//}
@end
在另一類所謂的MainView,我有:
@interface MainView : NSView
{
MyNSImageView *ImageView1;
MyNSImageView *ImageView2;
}
@end
- (void)awakeFromNib
{
ImageView1 = [[[MyNSImageView alloc] initWithFrame:NSMakeRect(5, 5, 240, 240)] autorelease];
NSImage* image1 = [[[NSImage alloc] initWithContentsOfFile: @"/Volumes/MAC DAT2/pictures/MP6107.jpg"] autorelease];
[ImageView1 setImage:image1];
[self addSubview:ImageView1];
ImageView2 = [[[MyNSImageView alloc] initWithFrame:NSMakeRect(300, 5, 240, 240)] autorelease];
image1 = [[[NSImage alloc] initWithContentsOfFile: @"/Volumes/MAC DAT2/pictures/MP5784.jpg"] autorelease];
[ImageView2 setImage:image1];
[self addSubview:ImageView2];
}
- (void) mouseDown2: (NSEvent *) theEvent
{
NSLog(@"mousedown2 from MainView");
}
- (void) mouseDown1: (NSEvent *) theEvent
{
NSLog(@"mousedown1 from MainView");
}
@end
- (void) mouseDown: (NSEvent *) theEvent
{
NSLog(@"mousedown from MainView");
}
在的MainView,當我點擊ImageView1或ImageView2,我想有mouseDown1或mouseDown2方法來處理事件相應不是mouseDown方法。
我已閱讀關於目標/動作/委託和響應者的東西,但仍然看不到確切的語法來做到這一點。
這樣做。我知道這將涉及選擇器和委託的東西。但是不能把所有的連接聯繫在一起。做得好!!!如果你熟悉C#或C++,他們處理這種情況要簡單得多。 (順便說一句:你的代碼中缺少一行是「@synthesize delegate;」,它需要在MyNSImageView的實現文件中。) 只是一個側面的問題:以這種方式處理鼠標事件到MVC模型? – user523234 2011-05-11 14:26:09
感謝您指出缺少的@synthesize ...抱歉。 – 2011-05-11 14:33:30
檢查我的編輯是否有其他有效的方法......目標動作機制可能是這裏最常用的Cocoa/MVC方法。 – 2011-05-11 14:47:04