0

我有一个自定义视图。它有一些像这样的条件(仅示例):

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))

我想知道我该怎么做?编写这样的条件,或为此目的制作单独的视图。就像是:

视图1

...

self.addSubView(newView)
self.addSubView(newView2)

视图2

...

self.addSubView(newView3)
self.addSubView(newView4)
self.addSubView(newView5)

并在 ViewController 中添加其中之一:

if viewsNeeded {
    self.view.addSubView(view1)
} else {
    self.view.addSubView(view2)
}

在什么情况下创建什么样的视图更好,我应该如何决定这种事情?如果它是真实的,我需要一些非常广泛的答案和解释。

4

2 回答 2

1

如果一个视图可以有不同的状态,您将在具有特定责任的视图中处理这些不同的状态。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
  }
}

一般来说,保持视图层次尽可能平坦是一个很好的做法。您引入的视图越少,您的应用程序的性能就越好。决定最终取决于您,但请记住视图的目的是什么,以及子视图是否有助于该目的或真正服务于其他目的。

于 2015-09-25T14:07:48.647 回答
0

您描述的选项之间没有概念上的区别。从 MVC 模式的角度来看,它们都略有错误。您不必手动添加视图,视图必须自己创建其结构。

于 2015-09-25T12:59:29.997 回答