如何快速更改按钮图像?
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: [])
【讨论】:
以上是关于如何快速更改按钮图像?的主要内容,如果未能解决你的问题,请参考以下文章