ios - 需要有关为 iOS 应用程序实现多个(相似)场景的建议

标签 ios storyboard subclass segue viewcontroller

我正在开发一个具有多个功能(通过 tableview 选择)的应用程序,这些功能几乎都做同样的事情,相似的布局、相似的按钮、相似的输入字段等等。但在我相信它们自己的地方有足够的不同类(class)。每个都将显示自己的数据类型并具有不同的输入字段,但所有字段和布局看起来都相同,或者至少具有相同的主题。此外,拥有单独的类将使我能够自定义每个类的布局方式以及它将显示的数据。

我想就解决此问题的最佳方法提供一些建议。以下是我提出的想法:

想法 #1) 为每个功能创建一个场景,并为每个功能创建一个单独的 segue(总共可能有 10-20 个场景)。将创建一个 BaseViewController 以及每个函数的 ViewController 类,该类将子类化 BaseViewController 以实现某些代码重用。

想法 #2) 与想法 #2 类似,将为每个函数创建一个 BaseViewController 和类。然而,Storyboard 中的每个功能都没有一个场景,而是只有一个场景和一个到该场景的 Segue。在加载场景之前,场景的类将被设置为所选函数的类。问题是我不知道该怎么做,或者如果这可能的话,我四处搜索但没有找到任何示例。

我喜欢想法 #2,因为我不必为每个功能都创建一个新场景,因此更容易创建其他功能。但正如我提到的,不确定这是否可能,或者是否有更好的方法。

最佳答案

您的问题标题为“重用 Controller 类...”,但不清楚您要重用什么:

...all pretty much do the same thing, similar layout, similar buttons, similar input fields, etc. But different enough where I believe it justifies their own class.

然后:

Each will display their own type of data and have different input fields, but all of the fields and layout will look the same, or at least have the same theme. Plus having separate classes would allow me to customize how each is laid out and the data it will display.

因此您已经排除了重用 View Controller 类的可能性,而且听起来您也不能重用 View 布局。

我的建议是仔细考虑这几个 View Controller 和布局的共同点。确定后,您有多种选择:

  • 为 View Controller 创建一个公共(public)基类。也许它们都使用相同的数据模型,并且它们都需要提供相同的方法集来与模型交互。将其抽象为一个单独的 View Controller 子类,然后从该基类派生 View Controller 可能会有所收获。

  • 尝试委派。Cocoa 和 Cocoa Touch 包含许多出色的示例,用于隔离难以在单独对象中重用的内容。您可能可以构建一个依赖于委托(delegate)来调整其行为的可重用 View Controller 类。

  • 使用 subview Controller 。如果所讨论的每个场景都有一个在逻辑上与场景的其余部分分开的公共(public)部分,您可以创建一个 View Controller 来管理该部分,然后让每个场景的 Controller 将其合并为 subview Controller 。

  • 使用 .xib 文件。如果您只是想重用 View 层次结构和 View 的定位方式,请考虑使用 .xib 文件来设置单个 View 等级制度。然后,每个 View Controller 都可以加载该 .xib 以创建其自己的该 View 层次结构的副本。

此外,不要尝试重用不应该重用的东西。我们一直在阅读重用的好处,但只有适本地重用才能获得这些好处。与其尝试预先设计可重用部分,不如单独编写 View Controller ,然后查看将代码重构为公共(public)基类的合理之处。

关于ios - 需要有关为 iOS 应用程序实现多个(相似)场景的建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22545081/

相关文章:

java - 自定义类: Custom type cannot be converted to other custom type

ios - 使用 UITableView Cell 中的 segue 更新数据

ios - Swift 代码正在向核心数据添加不需要的 nil 数据

ios - 为什么 iPhone XR、XS 和 XS Max 不将环境图像应用于 ARKit 中的场景?

ios - 子类化 UIView 需要什么

xcode - Xcode 中的 Storyboard太慢了

ios - 从 tableview 移动到 Storyboard的另一个 uiviewcontroller

Scala 应用无参数

python - Python 赋值后类对象的继承

objective-c - 使用 Storyboard - objective c 初始化 UITabBarController 中的所有 UIViewControllers 而不显示它们