NSViewController mouseDown: не вызывается

У меня есть NSWindowController, где я добавляю свои соответствующие ViewController. Я хотел бы обрабатывать сенсорные события в одном из ViewController. Мой класс

window.h

@interface WindowController : NSWindowController<NSToolbarDelegate>

@property   (nonatomic, strong)    NSViewController                  *currentViewController;

@property   (assign)               IBOutlet        NSView            *targetView;

@end

Window.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, который

ViewController.h

@interface ViewController : NSViewController
@end

ViewController.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");
}

Я хотел бы получить контроль над mouseDown в ViewController. Я что-то здесь упускаю?

Благодарю.

2 ответа

Решение

Создайте Custom NSView, а затем делегируйте метод mouseDown в своем протоколе. Импортируйте и используйте customView в ViewController и делегируйте его методы. При щелчке по представлению срабатывает событие mouseDown.

Не уверен в моем ответе, но если вы не вызовете [super mouseDown:theEvent] в Window.m (который, кстати, должен называться WindowController.m), вы нарушаете цепочку респондента. Следовательно, ваш контроллер представления не может его видеть. Я прав?

Другие вопросы по тегам