【问题标题】:What is the right way of using Views in iOS development?在 iOS 开发中使用 Views 的正确方法是什么?
【发布时间】:2015-12-23 07:15:08
【问题描述】:

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

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

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

【问题讨论】:

  • 我更喜欢第二种方法,因为它使视图独立。在第一个示例中,viewsNeeded 参数使customView 的行为与外部状态相关联。 (但在任何绝对意义上,我都不会称我的偏好“正确”。)
  • 我认为这取决于很多事情。示例:如果您有带有复杂变量部分的简单视图,您可以使用 2 个视图,但是如果您有带有一些不同块的大复杂视图,您应该怎么做?如果您同时拥有复杂的 View 和 View 的复杂变量部分,如何在这种情况下进行设计以使您的应用更好地执行性能。

标签: ios swift view architectural-patterns


【解决方案1】:

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

【讨论】:

  • 可能是错误的,但是我不能将UITapGestureRecognizer添加到我的ImageView中,但是我可以将它添加到UIView中,所以在某些情况下你需要在你的View中添加Views(ScrollView是更好的例子),并且此选项存在一些性能或主要差异。
  • 如果您在内部创建视图,为什么第二种方式是错误的,所以它“创建自己的结构”,还是我弄错了?
  • 是的,你是对的,实际上视图在这两种情况下都会自行创建。所以从我的角度来看,你没有违反任何已知的架构师模式,这很重要)
  • 但是对于性能或只是编程体验,什么是更好的选择?我在编程方面没有太多经验,所以我决定向更有经验的程序员询问。
【解决方案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
  }
}

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

【讨论】:

    猜你喜欢
    • 2016-01-12
    • 2013-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-24
    • 2012-04-15
    相关资源
    最近更新 更多