自定义按钮在界面生成器中未正确显示
Posted
技术标签:
【中文标题】自定义按钮在界面生成器中未正确显示【英文标题】:Custom button is not showing correctly in Interface Builder 【发布时间】:2018-01-16 12:02:00 【问题描述】:我正在学习在 XCode 中开发 ios 应用程序。 我创建了应该有红色背景和绿色文本的简单自定义按钮(UIButton 的子类)。在 iOS 模拟器中运行应用程序时,一切正常。但是在界面生成器中使用了其他颜色(在界面生成器中指定)。测试项目可在https://www.dropbox.com/s/ro7i4omdbpwapi0/testapp%20%282%29.zip?dl=0 获得。有人可以帮忙吗?
这里是自定义 UIbutton 类的源代码:
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()
【问题讨论】:
请在您的问题中加入minimal reproducible example。 @the4kman 你下载附件了吗?这是一个不会在 IB 中呈现的自定义按钮类的最小示例。 您应该在问题本身中包含重现问题的代码。 @the4kman 似乎只运行附加项目来查看问题要简单得多。但是好的,我将在帖子中包含 DefaultButton 类的源代码 【参考方案1】:您回答中描述的行为是正确的;但我认为你混合了两种不同的东西。
基本上,如果您想为按钮标题和按钮背景着色,则必须使用界面生成器中的可用字段。您有一些不错的属性可以轻松设置这些东西。
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
// ...
通过这样做,您可以在情节提要中编辑并查看带有漂亮渲染的视图!
Custom properties directly in storyboard
【讨论】:
感谢您的回答。因为会有很多相同样式的按钮,所以我不想总是在 IB 中指定这些样式参数。这就是创建自定义 UIButton 类的目的。以上是关于自定义按钮在界面生成器中未正确显示的主要内容,如果未能解决你的问题,请参考以下文章
界面生成器 UIButton 自定义背景图像在模拟器/设备上不起作用
如何设计WinForm中DataGridView控件的自定义按钮列