1

我有一个 NSWindowController,我在其中添加了相应的 ViewController。我想在其中一个 ViewController 中处理触摸事件。我的课是

窗口.h

@interface WindowController : NSWindowController<NSToolbarDelegate>

@property   (nonatomic, strong)    NSViewController                  *currentViewController;

@property   (assign)               IBOutlet        NSView            *targetView;

@end

窗口.m

-(void)addViewController
{
NSViewController *currentController = [[currentControllerClass alloc]initWithNibName:controllerIdentifier bundle:nil];
self.currentViewController = currentController;
[self.targetView addSubview:self.currentViewController.view];    
[self.currentViewController.view setFrame: [self.targetView bounds]];
}
-(void) awakeFromNib{

    [super awakeFromNib];
    [self.window setIgnoresMouseEvents:NO];
    [self setToolbarToPracticeView];
}

-(void)mouseDown:(NSEvent *)theEvent
{
    NSLog(@"Window > Mouse down");
}

我可以在这里打印 mousedown 事件。现在我有一个viewController,它是

视图控制器.h

@interface ViewController : NSViewController
@end

视图控制器.m

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Initialization code here.
    }
    return self;
}

-(void)awakeFromNib
{
    [self.view setAcceptsTouchEvents:YES];
}

-(BOOL)acceptsFirstResponder
{
    return YES;
}
-(void)mouseDown:(NSEvent *)theEvent
{
    NSLog(@"ViewController > mouse down");
}

我想在 ViewController 中控制 mouseDown。我在这里错过了什么吗?

谢谢。

4

2 回答 2

4

创建一个自定义 NSView,然后在它的协议中委托一个 mouseDown 方法。在 ViewController 中导入并使用 customView 并委托其方法。当您单击视图时,将触发 mouseDown 事件。

于 2014-01-16T08:18:59.080 回答
0

不确定我的答案,但是如果您不在 Window.m 中调用 [super mouseDown:theEvent] (顺便说一下,应该称为 WindowController.m),那么您正在破坏响应者链。因此您的视图控制器看不到它。我对吗?

于 2014-01-02T11:12:59.320 回答