iOS——何时创建子 ViewController 与 UIView 子类?

标签 ios uiview uiviewcontroller

也许这是一个愚蠢的问题,但我在 iOS 开发过程中遇到过很多次。

有时我会开发一个我想在多个屏幕上使用的 View 组件,所以我会决定继承 UIView 并使其成为我可以在多个地方使用的东西。

然后,我开始为其添加功能。也许它需要响应 NSNotification,或者它应该响应用户触摸。

在某个时候,我开始怀疑我是否真的应该创建一个 UIViewController 子类,并将其作为子 ViewController 添加到我的 UI 中。

对于向 UIView 添加一些行为与何时创建完整的 UIViewController 之间的界线在哪里划清界限是否达成共识?

最佳答案

我不能告诉你共识,但这是我的观点:

子类 UIView 仅当...

  • 你想做自定义绘图
  • 您需要自定义一个已经存在的 UIView 子类的一些行为
  • 您对布局 subview 有特殊需求。不过,大多数布局都可以通过 UIViewController 完成。
  • 可能是手势识别器无法完成的特殊触摸处理

子类 UIViewController 在所有其他情况下。无论如何,您几乎总是需要一个 Controller ,用于编写将 View 和模型绑定(bind)在一起的胶水代码,或用于处理用户交互。因此,Apple 在 UIKit 中让 Controller 可以轻松完成所有工作,并让 View 尽可能“愚蠢”。例如,嵌套 Controller 以创建复杂的 View 层次结构非常简单,无需具有单个 View 子类。

子类化 UIView 不是人们应该做的第一件事的一个指标是 UIView class reference 中标题为“子类化的替代方案”的部分。 .子类化 UIViewController 是首选的指示是 UIViewController class reference 中没有这样的部分:-)

关于iOS——何时创建子 ViewController 与 UIView 子类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17225196/

相关文章:

iphone - UIImageView 单元格 contentView 的 View 之一未与其父 View 一起扩展

ios - 使用 Xcode 8.3 在 Storyboard文件中添加了设备标签

iphone - 什么会导致 iPhone 主屏幕在模态翻转转换后可见?

ios - 如何在向后导航中获取 View Controller Storyboard ID 或 restortionIdentifier?

iphone - UINavigationController inside UIViewController 位于 UINavigationConroller 内

ios - 苹果应用商店 :- Upload and submit app for third party

ios - 如何使用 pjsip 2.5.5 或 2.6 在 Ios 中进行视频通话?

ios - 如何在 UIView 和 UIImageView 中重用相同的 IBDesignable 代码

ios - 无法从 nib 实例化 UIView。 "warning: could not load any Objective-C class information"

swift - 我如何舍入 UIView