Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.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
Objective c 带有可单击图像和文本的NSN按钮_Objective C_Cocoa_Nsbutton - Fatal编程技术网

Objective c 带有可单击图像和文本的NSN按钮

Objective c 带有可单击图像和文本的NSN按钮,objective-c,cocoa,nsbutton,Objective C,Cocoa,Nsbutton,我创建了一个NSButton(参见下面的代码)。按钮显示我想要的方式(无边框,图像在文本上方)。如果我单击按钮的文本部分,按钮将按下并调用其操作。如果我点击按钮的图像部分,那么绝对不会发生任何事情。如何使NSButton的图像部分可单击?我确信我可以将NSButtonCell子类化以实现这一点,但我不明白为什么这是必要的 NSButton *button = [[NSButton alloc] initWithFrame:NSZeroRect]; [button setBezelStyle:NS

我创建了一个NSButton(参见下面的代码)。按钮显示我想要的方式(无边框,图像在文本上方)。如果我单击按钮的文本部分,按钮将按下并调用其操作。如果我点击按钮的图像部分,那么绝对不会发生任何事情。如何使NSButton的图像部分可单击?我确信我可以将NSButtonCell子类化以实现这一点,但我不明白为什么这是必要的

NSButton *button = [[NSButton alloc] initWithFrame:NSZeroRect];
[button setBezelStyle:NSRegularSquareBezelStyle];
[button setBordered:YES];
[button setImagePosition:NSImageAbove];
[button setButtonType:NSMomentaryChangeButton];
[button setImage:[NSImage imageNamed:@"myImage"]];
[button setTitle:@"Button Title"];
[button setTarget:self];
[button setAction:@selector(buttonAction:)];

按钮本身上的图像。无需使其可点击。您的点击事件将被buttonAction捕获

您只需要显示单击图像的动画。为此,您需要另一个反转图像。并跟踪鼠标向下事件,当您单击向下显示其他图像时,当您释放鼠标(鼠标向上)时显示默认图像


这会给人点击图像的感觉。

可能有其他视图与按钮的图像重叠?当然,在上面的代码中,如果您提供了适当的按钮框架,那么所有这些都可以正常工作(对于有边框和无边框的按钮)。在clean project中试用。

我不确定这是否正确。当前,当我单击按钮的文本部分时,图像会变暗,就像正在单击一样。因此,基本上,点击文本部分就是向用户提供正确的反馈。但如果单击按钮的图像部分,则不会显示视觉反馈。无论我是否填充NSButton的alternateImage属性,情况都是这样。否,单击按钮的图像部分不起任何作用。。没有动画,且未调用目标的动作。单击按钮的文本部分(通过显示替代图像)为图像设置动画,并调用目标的操作。