我正在学习在XCode中开发iOS应用程序。 我创建了简单的自定义按钮(UIButton的子类),它应该有红色背景和绿色文本。在iOS模拟器中运行应用程序时,一切正常。但是在界面构建器中使用了其他颜色(在界面构建器中指定)。测试项目位于https://www.dropbox.com/s/ro7i4omdbpwapi0/testapp%20%282%29.zip?dl=0。有人可以帮忙吗?
以下是自定义UI按钮类的源代码:
import UIKit
@IBDesignable class DefaultButton: UIButton {
override init(frame: CGRect) {
super.init(frame: frame)
setup()
}
required init?(coder: NSCoder) {
super.init(coder: coder)
setup()
}
func setup() {
setTitleColor(UIColor.red, for: .normal)
backgroundColor = UIColor.green
//setBackgroundImage(UIImage.createGradient(colors: [ UIColor.defaultGradientStartColor, UIColor.defaultGradientEndColor ], startPoint: CGPoint(x: 0, y: 0), endPoint: CGPoint(x: 1, y: 0), size: CGSize(width: 200, height: 200)), for: .normal)
//layer.cornerRadius = 50
}
override func awakeFromNib() {
super.awakeFromNib()
setup()
}
}
答案 0 :(得分:0)
你回答的行为是正确的;但我觉得你混合了两件不同的东西。
基本上,如果要为按钮标题和按钮背景着色,则必须使用界面构建器中的可用字段。你有一些很好的属性来轻松地设置这些东西。
Use interface builder's parameters to design your look
因此,在这种情况下,在视图设置中定义 titleColor 和 backgroundColor 是不相关的,因为它是硬编码的。
如果您希望在故事板中为按钮显示自定义外观(如圆角),则可以使用 @IBInspectable 关键字在界面构建器中添加新属性。
@IBDesignable
class DefaultButton: UIButton {
@IBInspectable var borderWidth: CGFloat = 0 {
didSet {
layer.borderWidth = borderWidth
}
}
@IBInspectable var borderColor: UIColor? {
didSet {
layer.borderColor = borderColor?.cgColor
}
}
@IBInspectable var cornerRadius: CGFloat = 0 {
didSet {
layer.cornerRadius = cornerRadius
layer.masksToBounds = cornerRadius > 0
}
}
// ...
}
通过这样做,您可以在故事板中使用漂亮的渲染来编辑和查看视图!