如何将额外的参数传递给自定义UIView类以便在swift中进行初始化

时间:2018-01-02 20:11:56

标签: swift uiview

我试图编写一个类型为UIView的类,但在初始化时我希望它采取额外的参数,但我无法弄清楚如何绕过需要其params的UIView 。非常感谢任何帮助!

class MenuBar: UIView {

    let homeController: HomeController

    init(controller: HomeController){
        homeController = controller
        super.init()
    }
    override init(frame: CGRect) {
        super.init(frame: frame)

    }

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

}

在ViewController中,我将它初始化为:

let menuBar: MenuBar = {
    let mb = MenuBar(controller: self)
    return mb
}()

2 个答案:

答案 0 :(得分:6)

试试这个。

class MenuBar: UIView {

    let homeController: HomeController

    required init(controller: HomeController){
        homeController = controller
        super.init(frame: CGRect.zero)
        // Can't call super.init() here because it's a convenience initializer not a desginated initializer
    }

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

}

答案 1 :(得分:3)

根据我的经验,如果您想为Promise.all([rentals(), drivers(), vehicles()]) .then((results) => { this.setState({ rentalsData: results[0], driversData: results[1], vehiclesData: results[2] }); }); 设置自定义初始化程序,那么效果最佳:

UIView

无论创建视图的方法(故事板和代码),此方法都允许您保留常见的初始化代码

这是关于正确创建UIView。

此外,我建议避免将class CustomView : UIView { private var customProperty: CustomClass required init(customProperty: CustomClass) { super.init(frame: .zero) self.customProperty = customProperty self.setup() } required override init(frame: CGRect) { super.init(frame: frame) setup() } required init?(coder aDecoder: NSCoder) { super.init(coder: aDecoder) self.setup() } fileprivate func setup() { //Here all custom code for initialisation (common for all creation methods) } } 传递给UIViewController - 我认为您正试图以错误的方式解决某些问题。

在这两者之间进行通信的更好方法是使用UIViewdelegate - 但这有点偏离主题 - 也许你可以创建另一个关于为什么要像这样传递它的问题。