首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何绘制NSPopupButtonCell高亮图像

如何绘制NSPopupButtonCell高亮图像
EN

Stack Overflow用户
提问于 2020-04-23 02:57:36
回答 1查看 83关注 0票数 0

我有NSPopupButton内部的NSToolbar,有borderder = false,是有一些颜色烧伤混合时,突出显示。如果我使用bordered = true,图像将被绘制成很好的深色覆盖。

我试图用与bordered=true相同的方式绘制突出显示的状态。

PS: NSButtonCell和bordered = false一起工作。

我可以通过让bordered = true和重写drawBezel来实现这种行为,但是我想知道

我试过的事情:

  • highlightsBy
  • interiorBackgroundStyle
  • setCellAttribute

-

代码语言:javascript
复制
class ToolbarPopUpButtonCell : NSPopUpButtonCell {

  override var isHighlighted: Bool {
      get { return true }
      set { super.isHighlighted = newValue }
  }   

  override func drawImage(withFrame cellFrame: NSRect, in controlView: NSView) {
      super.drawImage(withFrame: cellFrame, in: controlView)
  }


  //used in case bordered = true so we do nothing
  override func drawBezel(withFrame frame: NSRect, in controlView: NSView) {

  }

  //doesn't work
  override var interiorBackgroundStyle: NSView.BackgroundStyle
      {
      return .raised
  }
}

  class ToolbarPopUpButton: NSPopUpButton {

  override func awakeFromNib() {
      cell?.setCellAttribute(.cellLightsByBackground, to: 1)
  }

  override var intrinsicContentSize: NSSize {
      return NSMakeSize(32 + 5, 32)
  }
}

注意右边的图像,它适用于bordered = false (NSButtonCell)

EN

回答 1

Stack Overflow用户

发布于 2020-04-23 06:52:59

我发现的唯一的黑客就是画一个地下细胞。仍在寻求更好的解决方案。

代码语言:javascript
复制
- (void)drawImageWithFrame:(NSRect)cellFrame inView:(NSView *)controlView
{
    NSImage *image = [self image];
    NSButtonCell *swapCell = [[NSButtonCell alloc] initImageCell:image];
    [swapCell setHighlighted:[self isHighlighted]];
    [swapCell drawImage:image withFrame:cellFrame inView:controlView];
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61378583

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档