推送NSPopUpButton drawRect句柄

时间:2014-03-12 19:35:34

标签: cocoa nsview nsbutton

我将NSPopUpButton子类化(放在工具栏中并打开NSMenu)并执行替代drawRect

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

   } else {

   }

}

如何确定按钮是否被按下(菜单显示)?

2 个答案:

答案 0 :(得分:0)

NSPopUpButtonNSButton的子类,因此您可以像覆盖任何其他按钮一样覆盖mouseDown:mouseUp:方法。

如果需要,可以使用它们来设置像isPushed这样的布尔属性,并在drawRect:方法中使用它,但将绘图代码放在{{1}中可能会更聪明}和mouseDown:

答案 1 :(得分:0)

对于带有NSMenu的NSPopUpButton,唯一有效的方法是将其设置为委托

@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;
}