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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何将额外的参数传递给自定义UIView类以便在swift中进行初始化相关的知识,希望对你有一定的参考价值。

我正在尝试编写类型为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
}()
答案

试试这个。

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

}
另一答案

根据我的经验,如果你想为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)
    }
}

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

这是关于正确创建UIView。

另外我建议避免将UIViewController传递给UIView - 我认为你试图以错误的方式解决一些问题。

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

以上是关于如何将额外的参数传递给自定义UIView类以便在swift中进行初始化的主要内容,如果未能解决你的问题,请参考以下文章

如何将额外的参数传递给 django admin 自定义表单?

将额外参数传递给 sklearn 管道中的自定义评分函数

Omnipay - 如何将“自定义”或“发票”参数传递给 Paypal?

是否可以将自定义参数传递给 android 市场,以便我的应用在首次启动时收到它?

如何将 argparse 参数传递给类

如何将自定义参数传递给事件处理程序