如何在Swift中更改按钮图像?

5

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

因此,我想在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中分配了图像,而不是通过代码。它们在按下时不会高亮。

那么,我该如何消除按钮被按下时的高亮显示?

9个回答

14

你不需要".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)
}

现在它可以工作了,但是它显示的不是原来的红色按钮,而是蓝色的。我该如何让它显示原始图像? - user2303213
更新了代码以展示如何在不同状态下保持其一致。 - Meagan S.
您无需设置两个状态。如果没有其他设置,则所有状态将使用与“正常”状态相同的图像。 - rmaddy

9

Swift 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)
}

2

首先,将您想要的图像放入Assets.xcassets文件夹中,只需拖动即可。然后,通过双击它来随意命名。假设它被称为“redTap”。

对于代码,您可以输入:

@IBOutlet var tapButton: UIButton!

override func viewDidLoad() {

    super.viewDidLoad()

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

2

有一个简单的解决方案:

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

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

为了防止按钮在按下时高亮显示,是这样吗? - user2303213
我已经尝试使用您提供的代码,但现在图片甚至都没有显示出来。 - user2303213
你将按钮类型设置为自定义了吗? - wenqi
@user2303213 在我的 Mac 上运行得非常好。Xcode 的版本是 7.3.1,Swift 是 2.2。 - wenqi
不要忘记从你的按钮中添加IBOutlet。 - PhilipS
我已经在 https://dev59.com/Kpjga4cB1Zd3GeqPJWJC#57676289 上回答了这个问题。 - Siddhesh Bhide

1
首先在界面构建器中将按钮类型设置为“自定义”,并设置按钮的正常状态下的图像。

enter image description here

在类文件中连接按钮的 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事件


0

让图片等于UIImage(named: "redTap.png") tapButton.setImage(image, .Normal)


你的图片是否在 XCode 的 image.assets 文件夹中? - impression7vx

0
let button = UIButton(type: .Custom)
let image = UIImage(named:"redTap")?.imageWithRenderingMode(.AlwaysTemplate)
button.setImage(image, forState: .Normal)
button.tintColor = UIColor.redColor()

0

针对最新的Swift版本进行更新, 它的工作方式如下:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接