我正在开发一个具有多个功能的应用程序(通过tableview选择),它们几乎都做同样的事情,类似的布局,类似的按钮,类似的输入字段等等。但是我觉得它们不同于我们自己的理由类。每个都将显示自己的数据类型并具有不同的输入字段,但所有字段和布局看起来都相同,或者至少具有相同的主题。加上单独的类可以让我自定义每个布局的方式以及它将显示的数据。
我想就解决这个问题的最佳方法提出一些建议。以下是我提出的想法:
创意#1) 为每个功能创建一个场景,并为每个功能创建一个单独的segue(总共可以是10-20个场景)。将创建一个BaseViewController,以及每个函数的ViewController类,它将子类化BaseViewController以进行一些代码重用。
想法#2) 与Idea#2类似,将创建一个BaseViewController,并为每个函数创建类。但是,不是在Storyboard中为每个函数设置一个场景,而是只有一个场景和一个Segue到该场景。在加载场景之前,场景的类将设置为所选功能的类。问题是我不知道如何做到这一点,或者如果这是可能的,我已经四处寻找并且没有找到任何例子。我喜欢Idea#2,因为我不需要为每个函数创建一个新场景,因此创建其他函数更容易。但正如我所提到的,不确定这是否可行或是否有更好的方法。
答案 0 :(得分:2)
您的问题标题为“重用控制器类...”,但目前尚不清楚您要重用的内容:
...几乎都做同样的事情,类似的布局,类似的按钮, 类似的输入字段等等。但我认为它不同 为自己的阶级辩护。
然后:
每个都会显示自己的数据类型并具有不同的输入 字段,但所有字段和布局看起来都一样,或者在 至少有相同的主题。加上单独的课程将允许我 自定义每个布局的方式以及显示的数据。
所以你已经排除了重用视图控制器类的作用,听起来你也无法重用视图布局。
我的建议是仔细考虑这几个视图控制器和布局的共同点。一旦你确定了,你有几个选择:
为视图控制器创建公共基类。也许它们都使用相同的数据模型,并且它们都需要提供相同的方法集来与模型进行交互。将其抽象到一个单独的视图控制器子类中,然后从该基类派生视图控制器可以获得回报。
尝试委托。 Cocoa和Cocoa Touch包含许多很好的隔离事物的例子,这些例子难以在单独的对象中重用。可能是您可以构造一个可重用的视图控制器类,它依赖于委托来调整其行为。
使用子视图控制器。如果每个场景都有一个与场景其余部分逻辑分离的公共部分,您可以创建一个视图控制器来管理该部分,然后让每个场景中的控制器将其合并为子视图控制器。
使用.xib文件。如果它只是视图层次结构以及要重用的视图的定位方式,请考虑使用.xib文件来设置单个视图层次结构。然后,每个视图控制器都可以加载.xib以创建自己的视图层次结构副本。
此外,不要尝试重用不应重复使用的内容。我们一直在阅读有关重用的好处,但只有在适当地重用事物时才能获得这些好处。不是试图预先设计可重用的部分,而是分别编写视图控制器,然后查看将代码重构为公共基类的意义。