Я хочу поместить все свойства subview и код настройки subview в подкласс UIView и загрузить его в мой подкласс UIViewController с помощью loadView(). Затем обращайтесь к элементам подкласса UIView, не изменяя свойства представления UIViewController все время.Программный доступ к элементам подкласса UIView в подклассе UIViewController
Это мой 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
Но есть ли способ позвонить testView
напрямую с self.view
в AwesomeViewController
?
Edit: То, что я ищу в стрижа Covariant return type.
Большой но я захотел загрузить подкласс UIView в свойство представления UIViewController и не подглядывать за ним, а также ess, которые рассматривают как тип подкласса UIView. Я думаю, что сейчас это невозможно. – richy
Также я не уверен, для чего нужен awesomeViewController. похоже, что он инициализируется, когда AwesomeView и затем переопределяется в ленивом закрытии загрузки. – richy
Я использую тот же код в одном из своих приложений. Вы пытались выяснить, можно ли его использовать в вашем случае? – mat