Как мне обработать событие mousedown внутри окна в Какао - PullRequest
3 голосов
/ 31 марта 2011

Как мне обработать событие mousedown внутри окна в Какао?

Мой код:

-(void)mouseDown:(NSEvent *)event {
    NSLog(@"yay");
}    

Я использую Mac OS10.6, в xcode 4.0.1.

РЕДАКТИРОВАТЬ: Да, это в делегате приложения, ноэто мой .h:

@ interface jumperAppDelegate: NSWindow {

, что я делал раньше в делегатах приложения (только не для событий мыши).Это действительно раздражает меня

Ответы [ 3 ]

6 голосов
/ 31 марта 2011

Убедитесь, что вы наследуете от NSWindow, а также соответствует протоколу <NSWindowDelegate>. Как это:

@interface YourWindow : NSWindow <NSWindowDelegate> {}
@end

Тогда вы должны получить уведомление о событии.

-(void)mouseDown:(NSEvent *)event {    
}
2 голосов
/ 31 марта 2011

Для того, чтобы этот метод вызывался как класс, в который он вызывается, он должен наследоваться от NSResponder. Окна и представления являются подклассами NSResponder. Если класс, из которого вы вызываете этот класс, не является подклассом NSResponder, метод не сработает.

* Обновление * Также обязательно переопределите acceptptsFirstResponder для возврата yes.

- (BOOL)acceptsFirstResponder {
   return YES;
}
0 голосов
/ 31 марта 2011

Не знаю точно, но я слышал, что в вашем заголовочном файле (.h) вам нужно заменить «NSObject» на «NSWindow». Я бы проверил это, но сейчас я не за компьютером.

Также убедитесь, что вы добавили следующий код в заголовочный файл:

- (void) mouseDown:(NSEvent*)event;

РЕДАКТИРОВАТЬ: Я провел несколько тестов и исследований, но я не могу заставить его работать. Хотя у меня есть два совета.

  • Используйте метод '-acceptsFirstMouse.

  • Попробуйте создать NSEvent:

    NSEvent * someEvent; - (Недействительными) MouseDown: (NSEvent *) someEvent;

Это, вероятно, не сработает, но у меня будет больше информации к 10 *.

...