如何将额外的参数传递给自定义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
- 我认为你试图以错误的方式解决一些问题。
在这两者之间进行沟通的更好方法是使用delegate
或closure
- 但这有点偏离主题 - 也许你可以创建另一个问题,为什么你要这样传递它。
以上是关于如何将额外的参数传递给自定义UIView类以便在swift中进行初始化的主要内容,如果未能解决你的问题,请参考以下文章
如何将额外的参数传递给 django admin 自定义表单?
Omnipay - 如何将“自定义”或“发票”参数传递给 Paypal?