Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cocoa 按下NSPOUPBUTTON drawRect手柄_Cocoa_Nsview_Nsbutton - Fatal编程技术网

Cocoa 按下NSPOUPBUTTON drawRect手柄

Cocoa 按下NSPOUPBUTTON drawRect手柄,cocoa,nsview,nsbutton,Cocoa,Nsview,Nsbutton,I子类NSPopUpButton(位于工具栏中并打开一个NSMenu)并执行可选drawRect - (void)drawRect:(NSRect)dirtyRect { if (ISPUSHED) { } else { } } 如何确定按钮是否按下(菜单正在显示)?nspoupbutton是NSButton的子类,因此您可以像在任何其他按钮上一样覆盖mouseDown:和mouseUp:方法 如果需要,可以使用它们设置布尔属性,如isPushed,并在drawRect

I子类NSPopUpButton(位于工具栏中并打开一个NSMenu)并执行可选drawRect

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

   } else {

   }

}

如何确定按钮是否按下(菜单正在显示)?
nspoupbutton
NSButton
的子类,因此您可以像在任何其他按钮上一样覆盖
mouseDown:
mouseUp:
方法


如果需要,可以使用它们设置布尔属性,如
isPushed
,并在
drawRect:
方法中使用,但是将绘图代码放在
鼠标下:
鼠标下:

中可能会更明智。对于带有NSMenu的NSPOUPBUTTON,唯一有效的方法是将其设置为委托

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

这并不总是如预期的那样有效,当与弹出的菜单结合使用时,您可以更具体一些吗?也许用你正在使用的代码编辑你的问题?这将有助于了解您的实际目标,您是否试图在用户单击按钮时更改按钮图像?