UILabels как часть подкласса UIView не инициирует - PullRequest
0 голосов
/ 12 февраля 2019

Итак, у меня есть подкласс 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")
 }
}

Ответы [ 2 ]

0 голосов
/ 12 февраля 2019

Я не уверен, почему вы используете 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) Создайте свой 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 и перетащите представление, перейдите в Identity Inspector, затем вставьте имя вашего класса'MainscreenButton' в пользовательском классе после этого перетащите UILabels в это представление и измените пользовательский класс из инспектора идентификации, как до 'LAUILabel', а затем свяжите метки с базовым пользовательским интерфейсом, который должен работать.

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")

    }

}
0 голосов
/ 12 февраля 2019

Ну.

они должны инициализироваться .. вам просто нужно дать им рамку / границы / позицию.IBOutlet подразумевает раскадровку или NIB, поэтому убедитесь, что вы установили класс в раскадровке или NIB и подключили IBOutlet.затем дайте меткам ограничения + текст, и они должны появиться.

, если вы хотите сделать что-то вроде var icon = LAUILabel(), а затем в инициализаторах сделайте как icon.frame = CGRect(... blah whatever) или программные ограничения для автоматического размещения, которые тоже должны работать

Обратите внимание, что в моем коде, хотя у меня есть это как инициализатор раскадровки / nib

required init?(coder aDecoder: NSCoder) {

}

, я не уверен, что он просто не подхватывает bc слегка отличающейся сигнатуры метода

вам также нужно будет вызвать label.layoutIfNeeded(), если вы не дадите им явных ограничений ширины (возможно, вы дадите ему только x).Потому что он будет инициализирован с шириной 0, если нет текста, нет ширины или нет начальных / конечных ограничений x.

...