UILabels作为UIView子类的一部分不启动



所以,我有一个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")
    }
}

相关内容

最新更新