我将NSPopUpButton子类化(放在工具栏中并打开NSMenu)并执行替代drawRect
- (void)drawRect:(NSRect)dirtyRect {
if (ISPUSHED) {
} else {
}
}
如何确定按钮是否被按下(菜单显示)?
答案 0 :(得分:0)
NSPopUpButton
是NSButton
的子类,因此您可以像覆盖任何其他按钮一样覆盖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;
}