如何快速更改按钮图像?

Posted

技术标签:

【中文标题】如何快速更改按钮图像?【英文标题】:How to change button image in swift? 【发布时间】:2016-06-26 18:20:49 【问题描述】:

我正在开发一个有按钮的应用程序。该按钮没有文本、图像或背景。

所以我想做的是在 viewDidLoad 函数中给它一个图像。

这就是我所拥有的:

@IBOutlet var tapButton: UIButton!

override func viewDidLoad() 

    super.viewDidLoad()

    tapButton.setImage("redTap.png", forState: UIControlState.Normal)

但我有一个错误说我无法将字符串转换为 UIIMage。

如何让它工作?

我试过了:

let image = UIImage(named: "redTap.png")

tapButton.setImage(image, forState: UIControlState.Normal)

我已经让它工作了,但现在我遇到了一个问题。

图像应该是红色文本,但它显示为蓝色。

我能够使用以下方法正确显示图像:

let image = UIImage(named: imageColor[randNum])?.imageWithRenderingMode(.AlwaysOriginal)
tapButton.setImage(image, forState: UIControlState.Normal)

我现在想要的是在按下按钮时不突出显示按钮。我还有一些其他按钮在 xcode 中而不是通过代码分配了图像。按下时它们不会突出显示。

那么当按钮被按下时,我怎样才能摆脱突出显示呢?

【问题讨论】:

【参考方案1】:

您不需要“.png”。

如果“.imageWithRenderingMode(.AlwaysOriginal)”对您有用:要将相同的图像保持在不同的状态,您必须为不同的状态设置相同的图像/属性。

@IBOutlet var tapButton: UIButton!

override func viewDidLoad() 
    super.viewDidLoad()

    tapButton.setImage(UIImage(named: "redTap")?.imageWithRenderingMode(.AlwaysOriginal), forState: .Normal)
    tapButton.setImage(UIImage(named: "redTap")?.imageWithRenderingMode(.AlwaysOriginal), forState: .Highlighted)

【讨论】:

它现在可以工作了,但不是显示红色按钮,这就是图像的样子,而是显示一个蓝色按钮。如何让它显示原始图像? 更新了代码以显示如何在不同的状态下保持相同。 你不需要设置两个状态。如果未设置任何其他内容,则所有状态都使用与“正常”状态相同的图像。【参考方案2】:

斯威夫特 3

yourBtn.setImage( UIImage.init(named: "imagename"), for: .normal)

【讨论】:

【参考方案3】:

现在(swift 3 版):

@IBOutlet var tapButton: UIButton!

override func viewDidLoad() 
    super.viewDidLoad()

    tapButton.setImage(UIImage(named: "redTap")?.withRenderingMode(.alwaysOriginal), for: .normal)
    tapButton.setImage(UIImage(named: "redTap")?.withRenderingMode(.alwaysOriginal), for: .normal)

【讨论】:

【参考方案4】:

首先,我会将您想要的图像放入 Assets.xcassets 文件夹中。只需将其拖入即可。然后您可以通过双击它来调用它。假设它被称为“redTap”。

对于您要输入的代码:

@IBOutlet var tapButton: UIButton!

override func viewDidLoad() 

    super.viewDidLoad()

    let redTapImage = UIImage(named: "redTap")
    tapButton.setImage(redTapImage, forState: UIControlState.Normal)

【讨论】:

【参考方案5】:

有一个简单的解决方案:

@IBOutlet var tapButton: UIButton!
didSet
let image = UIImage(named: imageColor[randNum])
tapButton.setImage(image, forState: UIControlState.Normal)

此外,在属性检查器中,将按钮类型设置为“自定义”

【讨论】:

是为了防止按钮按下时高亮吗? 我已经尝试使用您提供的代码,但现在图像甚至不显示。 您是否将按钮类型设置为自定义? @user2303213 在我的 Mac 上运行良好 Xcode 的版本是 7.3.1 swift 是 2.2 不要忘记从您的按钮添加 IBOutlet。【参考方案6】:

首先在界面生成器中将您的按钮类型设置为Custom,并为您的按钮设置正常状态的图像。

将类文件中按钮的 IBOutlet 连接为

@IBOutlet weak var btnCheckbox: UIButton!

viewDidLoad 的类文件中将所选状态的图像设置为

btnCheckbox.setImage(UIImage.init(named: "name_of_image"), for: .selected)

在类文件中创建@IBAction

@IBAction func onTapCheckBox(_ sender: UIButton) 
    sender.isSelected = !sender.isSelected

然后将@IBAction 连接到来自界面构建器的按钮的Touch up Inside 事件

【讨论】:

【参考方案7】:

让 image = UIImage(named : "redTap.png") tapButton.setImage(image, .Normal)

【讨论】:

你的图片在 XCode image.assets 文件夹中吗?【参考方案8】:
let button = UIButton(type: .Custom)
let image = UIImage(named:"redTap")?.imageWithRenderingMode(.AlwaysTemplate)
button.setImage(image, forState: .Normal)
button.tintColor = UIColor.redColor()

【讨论】:

【参考方案9】:

更新最新的 swift 版本, 它是这样工作的

button.setImage(UIImage(named: "propopup")?.withRenderingMode(.alwaysOriginal), for: [])

【讨论】:

以上是关于如何快速更改按钮图像?的主要内容,如果未能解决你的问题,请参考以下文章

快速播放完成时更改按钮图像

如何在 swift 中单击按钮时更改 uiimage 的图像?

使用图像快速设置按钮约束

如何仅更改图像按钮内的图像而不是整个图像按钮

选择一个按钮时如何更改多个按钮的按钮图像?

如何更改多个按钮图像和条件