Как правильно использовать 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 они оба немного не правы. вам не нужно добавлять представления вручную, представление должно создавать свою структуру.

Другие вопросы по тегам