События Mouse Down в Objective-C - PullRequest
       28

События Mouse Down в Objective-C

3 голосов
/ 04 апреля 2011

Я знаю, что этот вопрос задавали много раньше, но у меня ничего не получится.Следующий код ничего не будет делать.

- (void) mouseDown:(NSEvent*)event {
    NSLog(@"It worked!");

}

Я пробовал множество различных способов заставить это работать, включая создание собственного NSEvents таким образом:

NSEvent *someEvent;

- (void) mouseDown:(NSEvent*)someEvent {
    NSLog(@"It worked!");

}

Это мой .h файл:

@interface test : NSWindow <NSWindowDelegate> {

}

Кто-нибудь объяснит, как заставить это сделать что-то?

Ответы [ 3 ]

9 голосов
/ 04 апреля 2011

Убедитесь, что ваш класс наследуется от NSWindow и соответствует протоколу <NSWindowDelegate>.В противном случае это просто метод с именем mouseDown, и никто его никогда не вызовет.

Обновление: Измените файл заголовка так, чтобы он выглядел следующим образом:

@interface test : NSWindow <NSWindowDelegate> {  

} 

Другими словами, не помещайте прототип mouseDown в определение интерфейса или где-либо еще в файле .h.

В вашей реализацииfile (.m), укажите только метод:

- (void) mouseDown:(NSEvent*)someEvent {         
    NSLog(@"It worked!");          
} 

Предполагая, что на устройстве включена регистрация (вы уверены, что можете прочитать NSLog вывод из другого места вашей программы?), выдолжен увидеть "Это сработало!"напечатано там.

Я ни в коем случае не эксперт obj-C, но я думаю, что, поместив прототип mouseDown в определение интерфейса, вы в основном создавали свой собственный mouseDown метод, который скрывалнастоящий.Это указывало компилятору, что он не должен вызывать ваш метод mouseDown при щелчке окна.

4 голосов
/ 04 апреля 2011

Ваш подкласс должен иметь родительский класс NSResponder, иначе вы не получите никаких событий.

0 голосов
/ 30 мая 2015

Вы переопределяете класс NSWindow, вы должны переопределять NSView "contentView" класса NSWindow для захвата событий мыши.Большинство украшений (NSViews) в окне за пределами contentView являются частными.

Просто создайте новый NSView, который переопределяет mouseDown и т. Д., И добавьте его в качестве представления контента в объект NSWindow.

...