【发布时间】:2017-02-12 23:38:47
【问题描述】:
我想将所有子视图属性和我的子视图设置代码放在 UIView 子类中,并使用 loadView() 将其加载到我的 UIViewController 子类中。然后访问 UIView 子类成员,而不需要一直转换 UIViewController 的 view 属性。
这是我的 UIView 子类AwesomeClass
class AwesomeView: UIView {
lazy var testView:UIView = {
let view = UIView()
view.backgroundColor = UIColor.red
self.addSubview(view)
return view
}()
override init(frame: CGRect) {
super.init(frame: frame)
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
override func layoutSubviews() {
super.layoutSubviews()
testView.frame = CGRect(x: 10
, y: 10
, width: self.bounds.size.width - 20
, height: 100)
}
}
还有我的 UIViewController 子类AwesomeViewController
class AwesomeViewController: UIViewController {
override func loadView() {
let view = AwesomeView()
self.view = view
}
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
我可以这样做:
var subclassedView:AwesomeView {
get {
return self.view as! AwesomeView
}
}
和
subclassedView.testView.backgroundColor = UIColor.blue
但是有没有办法在AwesomeViewController 中直接用self.view 调用testView?
编辑: 我正在寻找的是Covariant return type swift。
【问题讨论】:
-
这里有同样的问题。有什么解决办法吗?
标签: swift uiview types uiviewcontroller subclass