Ручка NSPopUpButton drawRect нажата

Я подкласс NSPopUpButton (который помещается на панель инструментов и открывает NSMenu) и делаю альтернативный drawRect

- (void)drawRect:(NSRect)dirtyRect {
   if (ISPUSHED) {

   } else {

   }

}

Как определить, что кнопка нажата (отображается меню)?


person Peter Lapisu    schedule 12.03.2014    source источник


Ответы (2)


NSPopUpButton является подклассом NSButton, поэтому вы можете переопределить методы mouseDown: и mouseUp: так же, как и для любой другой кнопки.

Если вам нужно, вы можете использовать их для установки логического свойства, такого как isPushed, и использовать его в своем методе drawRect:, но, вероятно, было бы разумнее поместить код рисования в mouseDown: и mouseUp:.

person Gabriel Roth    schedule 12.03.2014
comment
это не всегда работает так, как ожидалось, в сочетании с всплывающим меню - person Peter Lapisu; 13.03.2014
comment
Можете быть более конкретными? Может быть, отредактируйте свой вопрос с помощью кода, который вы используете? Было бы полезно узнать вашу реальную цель — пытаетесь ли вы изменить изображение кнопки, когда пользователь нажимает на нее? - person Gabriel Roth; 13.03.2014

Единственное, что работало в случае NSPopUpButton с NSMenu, — это установка его в качестве делегата.

@interface AddDevicePopUpButton()

@property (nonatomic, assign, getter = isShowingMenu) BOOL showingMenu;

@end

@implementation AddDevicePopUpButton

- (void)awakeFromNib {

    [super awakeFromNib];

    self.menu.delegate = self;

}

- (void)drawRect:(NSRect)dirtyRect {

    if (self.showingMenu) {

    } else {

    }

}

- (void)menuWillOpen:(NSMenu *)menu {
    self.showingMenu = YES;
}

- (void)menuDidClose:(NSMenu *)menu {
    self.showingMenu = NO;
}
person Peter Lapisu    schedule 13.03.2014