documentation for NSPopUpButton指出:


  NSPopUpButton对象使用NSPopUpButtonCell对象来实现其用户界面。


我从NSPopUpButtonCell派生了一个新类,该类实现了drawBorderAndBackgroundWithFrame:inView:以实现自定义绘图。另外,我从NSPopUpButton派生了一个新类,并使用cellClass将其派生类用于它。 (即我不是通过界面生成器来工作的。)

但是随着macOS 10.14 beta的出现,此例程不再被调用,我观察到“正常”(即非定制)绘图。

多亏了@Marc T.'s answer,我(认为我)才能够将问题定位为以下事实:只有在派生单元中实现了drawBorderAndBackgroundWithFrame:inView:时,该单元才明显调用drawInteriorWithFrame:inView:

我找不到关于此的可靠文档。有没有?

最佳答案

如果macOS 10.14中会有这样的更改,我认为苹果会在WWDC 2018上宣布这一点。对Interface Builder的快速检查显示,到目前为止,没有任何变化。创建NSPopUpButtonCell的子类以将其用作弹出按钮单元的类仍在按预期方式工作。
我要提到的是,只有在同时实现drawInterior的情况下才调用drawBorderAndBackground。由于我以前从未使用过drawBorderAndBackground,所以我不能说这是否是从先前版本到10.14的更改。

class Cell: NSPopUpButtonCell {

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

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


希望这可以帮助。

关于objective-c - NSPopUpButton:NSPopUpButtonCell是否已弃用?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51175125/

10-09 01:50