NSPopUpButton 活动图像

发布于 2024-10-11 04:39:44 字数 307 浏览 5 评论 0原文

我想创建一个带有自定义活动图像的 NSPopUpButton。我有两张图像,一张用于非活动图像,另一张用于活动图像。在界面生成器中,我设置了图像和 Alt。 NSPopUpButton 的图像。图像显示正确,但当我单击按钮时,它显示标准的深色按钮状态而不是 Alt。图像。

以下是界面构建器面板的屏幕截图: http://cl.ly/0D2c0Y2y0f1Z462d311X

如何设置NSPopUpButton 在单击时显示我的备用图像?

I want to create an NSPopUpButton with a custom active image. I have two images, one for inactive, and another for active. In interface builder I set the Image and Alt. Image for the NSPopUpButton. The Image is showing correctly but when I click on the button it displays the standard dark button state instead of the Alt. Image.

Here is a screen shot of the interface builder panel: http://cl.ly/0D2c0Y2y0f1Z462d311X

How can I setup the NSPopUpButton to display my alternate image when it's clicked?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

思念绕指尖 2024-10-18 04:39:44

Apple Dev 论坛的一位开发人员为我指明了正确的方向:https://devforums.apple.com/message /364824

这是我想出的作为 NSPopUpButtonCell 子类的内容,它尊重 IB 的备用图像:

- (void)drawImageWithFrame:(NSRect)cellRect inView:(NSView *)controlView{
    NSImage *image = self.image;
    if([self isHighlighted] && self.alternateImage){
        image = self.alternateImage;
    }

    //TODO: respect -(NSCellImagePosition)imagePosition
    NSRect imageRect = NSZeroRect;
    imageRect.origin.y = (CGFloat)round(cellRect.size.height*0.5f-image.size.height*0.5f);
    imageRect.origin.x = (CGFloat)round(cellRect.size.width*0.5f-image.size.width*0.5f);
    imageRect.size = image.size;

    [image drawInRect:imageRect
                 fromRect:NSZeroRect
                operation:NSCompositeSourceOver 
                 fraction:1.0f 
           respectFlipped:YES 
                    hints:nil];    
}

A developer from the Apple Dev forums pointed me in the right direction: https://devforums.apple.com/message/364824

Here's what I came up with as a subclass of NSPopUpButtonCell that respects the alternate image from IB:

- (void)drawImageWithFrame:(NSRect)cellRect inView:(NSView *)controlView{
    NSImage *image = self.image;
    if([self isHighlighted] && self.alternateImage){
        image = self.alternateImage;
    }

    //TODO: respect -(NSCellImagePosition)imagePosition
    NSRect imageRect = NSZeroRect;
    imageRect.origin.y = (CGFloat)round(cellRect.size.height*0.5f-image.size.height*0.5f);
    imageRect.origin.x = (CGFloat)round(cellRect.size.width*0.5f-image.size.width*0.5f);
    imageRect.size = image.size;

    [image drawInRect:imageRect
                 fromRect:NSZeroRect
                operation:NSCompositeSourceOver 
                 fraction:1.0f 
           respectFlipped:YES 
                    hints:nil];    
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文