如何创建使用固定图像的NSPopUpButton,而不是箭头?

我试图让
NSPopUpButton
像一个标准的
NSButton
一样只有一个图像集,但没有任何运气。 很像Mail.app中的“+”按钮: 我假设他们用ѭ0做了这个。我尝试过的显而易见的事情是:
NSMenuItem *imageItem = [[[NSMenuItem alloc] init] autorelease];
[imageItem setImage:[NSImage imageNamed:NSImageNameAddTemplate]];

[[popUpButton cell] setUsesItemFromMenu:NO];
[[popUpButton cell] setMenuItem:imageItem];
[[popUpButton cell] setImagePosition:NSImageOnly];
然而,这并没有显示图像,而只是显示了一对箭头(我怀疑它们被绘制在图像所在的位置)。打电话给ѭ4也什么也没做。 是否有记录的方法来执行此操作,还是归结为某些自定义子类?     
已邀请:
要防止按钮显示箭头:
[popupButton.cell setArrowPosition:NSPopUpNoArrow];
    
在你的例子中,是的,它可能是用
NSPopUpButton
实现的,而不是试图自定义单元格,你真正想要的是一个
-pullsDown:
设置为
YES
的按钮。 这在Interface Builder中最容易设置。更简单的是,使用BWToolkit,它具有专门用于此目的的按钮栏和自定义按钮。     
这是我用来最终在Swift中运行的代码(以Apple的Menu Madness演示应用程序为模型)。
func setUpButton() {
    let popupButton = NSPopUpButton()
    popupButton.translatesAutoresizingMaskIntoConstraints = false
    popupButton.pullsDown = true
    popupButton.bordered = false
    let popupCell = popupButton.cell as! NSPopUpButtonCell
    popupCell.arrowPosition = NSPopUpArrowPosition.NoArrow
    popupButton.addItemWithTitle("")
    var item = popupButton.itemAtIndex(0)
    item?.image = NSImage(named: "add")
    item?.onStateImage = nil
    item?.mixedStateImage = nil
    popupButton.addItemWithTitle("Item1")
    item = popupButton.itemAtIndex(1)
    item?.action = #selector(item1Pressed)
    item?.target = self
    popupButton.addItemWithTitle("Item2")
    item = popupButton.itemAtIndex(2)
    item?.action = #selector(item2Tapped)
    item?.target = self
    self.addSubview(popupButton)

    // NOTE: These are auto layout helper methods I made that you won't have. 
    // Just note that here is where I set up the auto layout constraints.
    popupButton.widthConstraint(40)
    popupButton.heightConstraint(20)
    popupButton.centerVerticallyInSuperview()
    popupButton.trailingSpaceToSuperview(0)
}

// TO MAKE SURE ALL ITEMS ALWAYS VALID (WHAT I WANTED FOR MY USE CASE)
override func validateMenuItem(menuItem: NSMenuItem) -> Bool {
    return true
}

func item1Pressed() {
    // do stuff
}

func item2Pressed() {
    // do stuff
}
务必使按钮的宽度/高度足够大以适应图像。我发现按钮右侧有一些填充物覆盖了我的小图像,直到我按下足够宽的按钮以容纳神秘的填充物。     
@Laurent Etiemble(现已删除)的答案帮助了我和OP。   看一下这个主题和Apple的示例菜单   疯狂:它们包含一些示例代码以将图像放在a上   
NSPopUpButton
。     
在Xcode 4.4中,您可以使用Interface Builder完成所有这些操作。 将标准
NSPopUpButton
拖到窗口, 选择Style作为你想要的任何类型的按钮, 选择按钮以获得图像但不设置图像, 在按钮顶部拖动所需图标的
NSImage
。 我发现使用
NSImage
而不是设置按钮的图像效果更好。在弹出菜单中选择项目时,设置按钮图像会导致问题。     

要回复问题请先登录注册