如何在 RubyMotion 中实现 OSX 上的图像按钮?

How to implement image button on OSX in RubyMotion?

我觉得这应该非常简单,但我就是无法让它工作。

我正在这样创建一个按钮:

closeButton = NSButton.alloc.initWithFrame(
    [[10, 10], [100, 22]]
  ).tap do |button|
    button.bezelStyle = NSShadowlessSquareBezelStyle
    button.buttonType = NSMomentaryChangeButton
    button.title = 'Close'
    button.bordered = false
    button.image = NSImage.imageNamed('img/circle')
    p button.image
    button.imagePosition = NSImageOnly
    button.target = window
    button.action = 'close'
  end

circle.pngcircle@2x.png 两张图片存储在 /Resources/img.

不用说,我得到一个灰色按钮,其中没有文本或图像。另外,p button.image returns nil.

我已经多次清理和重建我的项目。

这似乎并不难实施。我忽略了什么?

首先,让我说我对 OSX 的经验为零,但我希望 iOS 信息能有所帮助。有人告诉我它们非常相似。您需要确保您使用的是自定义按钮 (UIButtonTypeCustom)。这将允许您使用背景图像功能。

这里有一些很好的示例代码,可能会对您有所帮助。

https://github.com/IconoclastLabs/rubymotion_cookbook/tree/master/ch_2/16_buttons

再次抱歉,如果这不能解决问题,但我想我 post 此信息可以提供帮助!

所以我有点明白了。 imageNamed 似乎没有按我预期的方式工作,或者我只是错误地使用了它。

我可以通过执行以下操作在按钮上设置图像:

NSButton.alloc.initWithFrame(
    [[110, 10], [100, 22]]
).tap do |button|
    neutralImgPath = NSBundle.mainBundle.pathForResource("img/circle2", ofType: "png")
    neutralImgUrl = NSURL.fileURLWithPath(neutralImgPath)
    neutralImg = NSImage.alloc.initWithContentsOfURL(neutralImgUrl)

    button.setImage(neutralImg)

    button.setImageScaling(NSImageScaleProportionallyDown)
    button.setImagePosition(NSImageOnly)

    button.translatesAutoresizingMaskIntoConstraints = false
    button.bordered = false
    button.bezelStyle = NSShadowlessSquareBezelStyle
    button.buttonType = NSMomentaryChangeButton

    button.target = MainAppWindow.get
    button.action = 'minimize:'
end

很想找出一种更简洁的方法来做到这一点,但就目前而言,它完成了工作!