所以,我有一个UIView的子类,我想包含两个自定义UILabel。我的 UIView 的子类初始化为"它应该",但是,UILabels 没有(我也尝试过使用普通的 UILabels,但这也不起作用。没有任何打印语句的痕迹,并且不显示它们。当我直接将一个放在故事板上时,它们本身确实工作得很好。
我不知道该转,也不知道有什么问题。我已经在互联网上搜索了好几天了。请帮助这个初学者...
class MainscreenButton: UIView {
@IBOutlet var icon: LAUILabel!
@IBOutlet var info: LAUILabel!
required init(coder aDecoder: NSCoder){
super.init(coder: aDecoder)!
print("mainscreenbutton requiredinit")
}
override init(frame: CGRect) {
super.init(frame: frame)
print("mainscreenbutton frameinit")
}
}
嗯。
他们应该初始化......你只需要给他们一个框架/边界/位置。IBOutlet 表示故事板或 NIB,因此请确保在情节提要或笔尖中设置类并连接 IBOutlet。然后给标签约束 + 文本,它们应该会出现。
如果您想执行类似 var icon = LAUILabel()
的操作,然后在初始值设定项中执行icon.frame = CGRect(... blah whatever)
或自动布局的编程约束,这也应该有效
请注意,在我的代码中,尽管我将其作为故事板/笔尖初始值设定项
required init?(coder aDecoder: NSCoder) {
}
不确定它是否只是没有接受它 BC 的方法签名略有不同
如果你不给他们明确的宽度约束(也许你只给它一个 x(,你也需要调用label.layoutIfNeeded()
。因为如果没有文本和宽度或没有前导/尾随 x 约束,它将使用 0 宽度进行初始化。
我不确定你为什么要将 UIView 作为按钮,但如果你想这样做,只需流这个:
1( 创建 UILabel 自定义类
class LAUILabel: UILabel {
//you can even define some params like @IBOutlet images ...
override init(frame: CGRect) {
super.init(frame: frame)
updateUI()
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
updateUI()
}
private func updateUI() {
backgroundColor = .red
textColor = .green
numberOfLines = 1
textAlignment = .center
}
}
2( 创建您的主屏幕按钮
class MainscreenButton: UIView {
@IBOutlet weak var icon: LAUILabel!
@IBOutlet weak var info: LAUILabel!
required init(coder aDecoder: NSCoder){
super.init(coder: aDecoder)!
print("mainscreenbutton requiredinit")
}
override init(frame: CGRect) {
super.init(frame: frame)
print("mainscreenbutton frameinit")
}
}
3( 将 UI 与自定义类连接您将转到情节提要或 Xib 文件并拖动视图转到身份检查器,然后在自定义类中插入您的类的名称"MainscreenButton",然后将 UILabel 拖到该视图中并从身份检查器更改自定义类,就像在"LAUILabel"之前一样,然后将标签与它应该工作的对应 UI 链接起来。
4(否则,您可以像这样创建没有故事板的标签:
class MainscreenView: UIView {
required init(coder aDecoder: NSCoder){
super.init(coder: aDecoder)!
print("mainscreenbutton requiredinit")
let icon = LAUILabel(frame: CGRect(origin: CGPoint(x: 100, y: 50), size: CGSize.zero))
icon.text = "icon"
icon.sizeToFit()
addSubview(icon)
let info = LAUILabel(frame: CGRect(origin: CGPoint(x: 200, y: 50), size: CGSize.zero))
info.text = "info"
info.sizeToFit()
addSubview(info)
}
override init(frame: CGRect) {
super.init(frame: frame)
print("mainscreenbutton frameinit")
}
}