2016-06-26 29 views
3

我正在研究一个有按钮的应用程序。该按钮没有文字,图像或背景。如何在swift中更改按钮图像?

所以我想要做的就是在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中分配给它们的图像,而不是通过代码。按下时不会突出显示。

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

回答

8

你不需要 “巴纽”。

如果“.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) 
} 
+0

它现在正在工作,但不是显示一个红色的按钮,这是图像,它显示一个蓝色的。我如何让它显示原始图像? – user2303213

+0

更新了代码以显示如何在不同状态下保持相同。 –

+0

你不需要设置两个状态。如果没有其他设置,所有状态都使用与“正常”状态相同的图像。 – rmaddy

0

令图像=的UIImage(命名为: “redTap.png”) tapButton.setImage(图像,。正常)

+0

我试过,但它仍然不起作用 – user2303213

+0

您的图像是否在XCode image.assets文件夹中? – impression7vx

0

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

对于代码,你会放:

@IBOutlet var tapButton: UIButton! 

override func viewDidLoad() { 

    super.viewDidLoad() 

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

有一个简单的解决方案:

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

除此之外,在属性检查器设置按钮类型,以 '定制'

+0

这是为了防止按下时按钮突出显示? – user2303213

+0

我曾尝试使用您提供的代码,但现在图像甚至不显示。 – user2303213

+0

您是否将按钮类型设置为自定义? – wenqi

5

斯威夫特3

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

现在(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) 
}