Swift-以编程方式将标签添加到堆栈视图中

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

我的目标是将标签添加到xib的stackview中。如果使用视图控制器显示结果,则下面的所有内容都非常有用。但我不需要显示正在创建的视图。我只想将其添加到数组中。 (该数组稍后将转换为PDF。)由于某种原因,如果我只保存视图,则在创建PDF时不会显示堆栈视图中的任何内容。我的实际xib还有很多其他字段,它们显示得很好。这只是我尝试以编程方式添加为堆栈视图的标签而无法显示的字段!

这是我的xib。堆栈视图固定在边缘,并且设置为相等填充。enter image description here

这是xib的代码。该视图有一个出口,而堆栈视图有一个出口。

import UIKit

class ContainerView: UIView {

    @IBOutlet var contentView: UIView!
    @IBOutlet weak var testStackView: UIStackView!

    override init(frame: CGRect) {
        super.init(frame: frame)
        setup()
    }

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        setup()
    }

    func setup() {
        Bundle.main.loadNibNamed("ContainerView", owner: self, options: nil)
        addSubview(contentView)
        contentView.frame = self.bounds
    }
}

最后,这是将标签添加到堆栈视图的类。它已大大简化。

import UIKit

class PreparePDF : UIView {

    func addMyArrangedSubviews (
        let containerView = ContainerView()

        let testLabel1 = UILabel()
        testLabel1.text = "Hola"
        testLabel1.backgroundColor = .red

        let testLabel2 = UILabel()
        testLabel2.text = "Hello"
        testLabel2.backgroundColor = .yellow

        containerView.testStackView.addArrangedSubview(testLabel1)
        containerView.testStackView.addArrangedSubview(testLabel2)  

        pdfPages.append(containerView)
}

我已经尝试问过几次这个问题,但我认为我听起来太复杂了。我不确定这会更好!

swift xib uistackview
1个回答
0
投票

您正在使用以下内容创建视图:let containerView = ContainerView(),然后将标签添加到其stackView,然后单击该函数的末尾,并containerView被添加为deinit,因为您没有保留它或将其添加为子视图。

您对ContainerView的初始化也是错误的。如果调用init,它将不会加载nib文件。您应该改为调用UINib.instantiate(withOwner:options:),并将您的设置代码移至awakeFromNibfatalError the constructors,以便没人能以编程方式制作笔尖并绕过笔尖文件(在这种情况下,插座将无法连接)。

let containerView = UINib(nibName: String(describing: ContainerView.self), bundle: nil)
      .instantiate(withOwner: nil, options: nil).first as! ContainerView
© www.soinside.com 2019 - 2024. All rights reserved.