Нет MouseUp: / Down: при пользовательском просмотре в NSSplitView на Leopard - PullRequest
1 голос
/ 12 августа 2010

В настоящее время я работаю над сборкой проекта для OSX 10.5 и выше. Прежде всего, пользователи 10.6 не видят этого; только 10,5 пользователей имеют эту проблему. Вы не можете воспроизвести это на 10.6.

Короче говоря: при размещении пользовательского расширенного класса NSView с реализацией перегрузки - (void) mouseUp: (NSEvent *) theEvent mouseUp не вызывается, когда он упакован в NSSplitView. rightMouseUp: / Down: РАБОТАЕТ на расширенном NSView.

Событие вызывается, когда я размещаю пользовательское представление в моем окне, когда я оборачиваю его непосредственно в nssplitview, mouseup не вызывается для пользователей leopard (10.5).

Шаги для воспроизведения (на 10,5!)

  1. Создать новый проект какао
  2. Создать следующий класс
  3. Перетащите пользовательский вид на окно и сделайте класс GTTest
  4. Перетащите разделенное представление в окно и просто добавьте GTTest в одно из представлений его содержимого.

Класс:

@interface GTTest : NSView {
}

#import "GTTest.h"
@implementation GTTest

- (void)mouseUp:(NSEvent *)theEvent {
 NSLog(@"Ger");
}

Нажатие на директиву GTTest в окне записывает красивую строку, нажатие на NSSplitView ничего не делает (также попробуйте точку останова). rightMouseDown: / Up: РАБОТАЕТ на NSView.

ps> Когда я добавляю кнопку в splitview (также производное nsview, с правами nsresponder?) Запускает ли мой метод IBAction; что мой класс выше не хватает, чтобы работать правильно?

Что я могу сделать?

Ответы [ 2 ]

1 голос
/ 12 августа 2010

Хорошо, я нашел исправление для этого:

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

- (void)mouseUp:(NSEvent *)theEvent {
    if ([NSCursor currentCursor]==[NSCursor resizeLeftCursor] 
        || [NSCursor currentCursor]==[NSCursor resizeRightCursor]
        || [NSCursor currentCursor]==[NSCursor resizeLeftRightCursor]) {
        [super mouseUp:theEvent];
    } 

    if ([NSCursor currentCursor]==[NSCursor resizeUpCursor] 
        || [NSCursor currentCursor]==[NSCursor resizeDownCursor]
        || [NSCursor currentCursor]==[NSCursor resizeUpDownCursor])
    {
        [super mouseUp:theEvent];
    }
}

И используйте этот класс в качестве splitview;Внезапно события поступают в пользовательские NSView.Странно, но факт!

0 голосов
/ 12 августа 2010

Я не знаю, почему 10.5 и 10.6 будут отличаться в этом отношении, но вы можете попробовать переопределить mouseDownCanMoveWindow, чтобы вернуть NO, как в этом вопросе:

события щелчка мыши в подклассе NSView

...