【发布时间】:2016-04-12 18:40:10
【问题描述】:
我使用代码为UIViewController 创建视图(带有子视图),我就是这样做的:
-
覆盖
loadView()class MYViewController: UIViewController { var myView: MyView! { return self.view as MyView } override func loadView() { view = MyView() } }
这是我创建自定义视图的方式:
class MyView: UIView {
// MARK: Initialization
override init (frame : CGRect) {
super.init(frame : frame)
addSubviews()
setupLayout()
}
convenience init () {
self.init(frame:CGRect.zero)
}
required init(coder aDecoder: NSCoder) {
fatalError("This class does not support NSCoding")
}
// MARK: Build View hierarchy
func addSubviews(){
// add subviews
}
func setupLayout(){
// Autolayout
}
// lazy load views
}
我为我所有的视图控制器都这样做,我正在寻找更优雅的方式,因为这个过程是重复的,所以有没有任何解决方案可以使这个通用化,例如,创建一个超级抽象类,或者为 UIViewController 创建一个扩展和 UIView,协议?我是 Swift 的新手,我认为 Swift 可以通过它的现代模式提供更好的优雅解决方案
【问题讨论】:
-
您在这里要解决的主要问题是什么?重复代码?如果是这种情况,为什么不让 ViewController 和 View 类成为您可以扩展的抽象类?
-
为此自定义视图尝试自定义委托协议
-
不知何故我觉得你应该更多地使用storyboards/xibs。我必须创建自定义视图是非常罕见的。当您可以在可视化编辑器中更快、更有效地做这些事情时,为什么还要在代码中使用子视图和布局设置呢?
标签: ios swift design-patterns uiviewcontroller swift-protocols