如何在设计器中的自定义按钮控件上显示图像
How to show image on custom button control in designer
我有一个自定义按钮控件,我试图在其中显示按钮的图像,但尽管以编程方式定义它,但它没有出现。
@IBDesignable class UCButtonNext: UIButton {
// setup programatically
override init(frame: CGRect) {
super.init(frame: frame)
setupButton()
}
// setup via Storyboard
required init?(coder aDecoder: NSCoder) {
//fatalError("init(coder:) has not been implemented")
super.init(coder: aDecoder)
setupButton()
}
override func awakeFromNib() {
super.awakeFromNib()
setupButton()
}
override func prepareForInterfaceBuilder() {
super.prepareForInterfaceBuilder()
setupButton()
}
func setupButton() {
setupButtonStyle()
setupShadow()
}
func setupButtonStyle() {
setTitleColor(.white, for: .normal)
backgroundColor = UIColor.clear
titleLabel?.font = UIFont(name: "Courier", size: 18)
setTitleColor(UIColor.black, for: .normal)
layer.cornerRadius = frame.height / 2
layer.borderWidth = 1.0
layer.borderColor = UIColor.white.cgColor
setImage(UIImage(named: "btnArrowRight"), for: .normal)
}
我的按钮显示在设计器中,但似乎无法显示图像。
这个问题的答案可能有帮助:
您需要在创建图像时动态指定包,因为主包在设计时不可用。
亚历克斯指出的答案 - https://whosebug.com/a/40359161/10657724 - 应该是你需要的。
为了帮助您调试问题,请更改此行:
setImage(UIImage(named: "btnArrowRight"), for: .normal)
至:
// DYNAMIC BUNDLE DEFINITION FOR DESIGNABLE CLASS
let dynamicBundle = Bundle(for: type(of: self))
// AND THEN SUCCESSFULLY YOU CAN LOAD THE RESSOURCE
if let image = UIImage(named: "btnArrowRight", in: dynamicBundle, compatibleWith: nil) {
setImage(image, for: .normal)
setTitle("Works!", for: .normal)
} else {
setTitle("Failed!", for: .normal)
}
这会将您的按钮标题设置为 "Works!" 或 "Failed!"
如果您看到 "Works!",您应该也会看到您的图片。
否则,你的图片资源有问题。
我有一个自定义按钮控件,我试图在其中显示按钮的图像,但尽管以编程方式定义它,但它没有出现。
@IBDesignable class UCButtonNext: UIButton {
// setup programatically
override init(frame: CGRect) {
super.init(frame: frame)
setupButton()
}
// setup via Storyboard
required init?(coder aDecoder: NSCoder) {
//fatalError("init(coder:) has not been implemented")
super.init(coder: aDecoder)
setupButton()
}
override func awakeFromNib() {
super.awakeFromNib()
setupButton()
}
override func prepareForInterfaceBuilder() {
super.prepareForInterfaceBuilder()
setupButton()
}
func setupButton() {
setupButtonStyle()
setupShadow()
}
func setupButtonStyle() {
setTitleColor(.white, for: .normal)
backgroundColor = UIColor.clear
titleLabel?.font = UIFont(name: "Courier", size: 18)
setTitleColor(UIColor.black, for: .normal)
layer.cornerRadius = frame.height / 2
layer.borderWidth = 1.0
layer.borderColor = UIColor.white.cgColor
setImage(UIImage(named: "btnArrowRight"), for: .normal)
}
我的按钮显示在设计器中,但似乎无法显示图像。
这个问题的答案可能有帮助:
您需要在创建图像时动态指定包,因为主包在设计时不可用。
亚历克斯指出的答案 - https://whosebug.com/a/40359161/10657724 - 应该是你需要的。
为了帮助您调试问题,请更改此行:
setImage(UIImage(named: "btnArrowRight"), for: .normal)
至:
// DYNAMIC BUNDLE DEFINITION FOR DESIGNABLE CLASS
let dynamicBundle = Bundle(for: type(of: self))
// AND THEN SUCCESSFULLY YOU CAN LOAD THE RESSOURCE
if let image = UIImage(named: "btnArrowRight", in: dynamicBundle, compatibleWith: nil) {
setImage(image, for: .normal)
setTitle("Works!", for: .normal)
} else {
setTitle("Failed!", for: .normal)
}
这会将您的按钮标题设置为 "Works!" 或 "Failed!"
如果您看到 "Works!",您应该也会看到您的图片。
否则,你的图片资源有问题。