您如何调用IBOutlet元素的初始化程序?

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

我编写了UITextField的以下子类:


    var imageView: UIButton? = nil

    var options: [String]? = nil

    let padding = UIEdgeInsets(top: 0, left: 5, bottom: 0, right: 30)

    override init(frame: CGRect) {
        super.init(frame:frame)
        self.backgroundColor = Constants.darkPurple
        self.textColor = .white
        self.layer.cornerRadius = 10
        self.clipsToBounds = true
        self.translatesAutoresizingMaskIntoConstraints = false
        self.tintColor = .clear

        Constants.styleDropDownField(self)
    }



    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        //fatalError("init(coder:) has not been implemented")
    }
}

当我以编程方式添加此类的实例时,它可以正常工作。但是,当我在情节提要中添加该类的实例,然后将其与IBAction连接时,它只是一个空白的白色文本字段,没有我在该类的初始化程序中分配的任何属性-似乎没有在所有。有什么方法可以调用元素的初始化程序吗?还是有另一个类似于viewDidLoad的函数在加载文本字段时运行?

ios swift uikit uistoryboard iboutlet
1个回答
0
投票

您无法调用情节提要中添加的组件的初始化程序。但是,您的方向正确。创建一个通用方法来设置这些属性。

 func commonSetup() {
        self.backgroundColor = Constants.darkPurple
        self.textColor = .white
        self.layer.cornerRadius = 10
        self.clipsToBounds = true
        self.translatesAutoresizingMaskIntoConstraints = false
        self.tintColor = .clear

        Constants.styleDropDownField(self)
    }

并从三种不同的方法中调用此方法

override func awakeFromNib() {
    super.awakeFromNib()
    self.commonSetup()
}

override init(frame: CGRect) {
    super.init(frame:frame)
    self.commonSetup()
}


//This method will be called when component is initialised from storyboard.
required init?(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)
    self.commonSetup()
}

0
投票

您必须调用init(frame:)init(coder:)中给出的实现,因为从情节提要中使用此方法时会调用此方法。这是代码:

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



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

func initialSetup() {
    self.backgroundColor = Constants.darkPurple
    self.textColor = .white
    self.layer.cornerRadius = 10
    self.clipsToBounds = true
    self.translatesAutoresizingMaskIntoConstraints = false
    self.tintColor = .clear

    Constants.styleDropDownField(self)
}
© www.soinside.com 2019 - 2024. All rights reserved.