Как правильно использовать Views в разработке для iOS?
У меня есть customView. У этого есть некоторое условие как это (единственный пример):
customView(viewsNeed: Bool)
...
if viewsNeeded {
self.addSubView(newView)
self.addSubView(newView2)
} else {
self.addSubView(newView3)
self.addSubView(newView4)
self.addSubView(newView5)
}
и тогда я могу добавить этот вид в мой ViewController
:
self.view.addSubView(customView(viewsNeeded))
Что я хочу знать, что я должен делать? Напишите условия, подобные этим, или создайте отдельные представления для этой цели. Что-то вроде:
View1
...
self.addSubView(newView)
self.addSubView(newView2)
View2
...
self.addSubView(newView3)
self.addSubView(newView4)
self.addSubView(newView5)
И добавьте один из них в ViewController:
if viewsNeeded {
self.view.addSubView(view1)
} else {
self.view.addSubView(view2)
}
Какой вид создания лучше в какой ситуации, и как я должен решить такие вещи? Мне нужны действительно широкие ответы с объяснениями, если это реально.
2 ответа
Если у представления могут быть разные состояния, вы должны позаботиться о тех разных состояниях в представлении, которое несет определенную ответственность. UINavigationBar является хорошим примером. Он имеет четкую цель, предоставляя пользователю навигационный контекст, но его состояние (и контекст) может сделать его другим.
func pushNavigationItem(...) {
...
if self.items.count > 1 {
// show backButton
} else {
// hide backButton
}
}
Если разные представления не работают вместе для общей цели, я бы не группировал их вместе в виде контейнера, а вместо этого добавил бы их отдельно, в зависимости от ваших потребностей в ViewController.
override func viewDidLoad() {
if userDidBuyContent() {
// add view with bought content
} else {
// add view to buy content
}
}
И вообще, хорошая практика - сохранять иерархию ваших представлений как можно более плоской. Чем меньше просмотров вы представите, тем лучше будет работать ваше приложение. Решение в конечном итоге остается за вами, но просто имейте в виду, какова цель представления и способствуют ли подпредставления этой цели или действительно служат какой-то другой цели.
Нет никакой концептуальной разницы между опциями, которые вы описали. с точки зрения паттерна MVC они оба немного не правы. вам не нужно добавлять представления вручную, представление должно создавать свою структуру.