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

问题描述 投票:0回答:2

所以,我有UIView的子类,我要包含两个自定义UILabels。我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")
 }
}
ios swift uilabel custom-controls
2个回答
0
投票

好。

他们应该初始化..你只需要给他们一个帧/边界/位置。 IBOutlet中暗示故事板或NIB,所以请确保您设置在故事板或笔尖类和连接IBOutlet中。然后给标签约束+文字,他们应该会出现。

如果你想这样做var icon = LAUILabel()然后在初始化做到像自动布局,应该工作太icon.frame = CGRect(... blah whatever)或方案限制

请注意,在我的代码,虽然我有这样的情节提要/笔尖初始化

required init?(coder aDecoder: NSCoder) {

}

不知道,如果它只是不就拿起BC略有不同的方法签名

你也有很多需要调用label.layoutIfNeeded(),如果你不给他们明确的宽度限制(也许你只是给它一个X)。因为它会与一个0宽度被初始化,如果世界上没有文本和无宽度或没有前导/尾随X约束。


0
投票

我不知道为什么你正在做的UIView的按钮,但如果u想要做的一样,只是流这样的:

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)创建MainscreenButton

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)你的用户界面与您的自定义类连接你会去到故事板或XIB文件并拖动视图去标识督察那么视图内即拖即UILabels后插入你的自定义类类的MainscreenButton'的名称和更改自定义从身份检查,如“LAUILabel”课前再与corespondent 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")

    }

}
© www.soinside.com 2019 - 2024. All rights reserved.