标签栏控制器的iOS模式:共享功能的视图控制器

时间:2014-06-16 06:47:16

标签: ios objective-c design-patterns uiviewcontroller uitabbarcontroller

我使用的是Storyboard,iOS 7 SDK,Xcode 6 Brta。

我有一个UITabBarController。

它有两个故事板关系:

(1)与UINavigationController 1的关系,其中嵌入了View Controller 1.

(2)与UINavigationController 2的关系,其中嵌入了View Controller 2.

每个视图控制器在每个导航栏中都有一组通用的UI元素。例如选项按钮,刷新按钮等

这些按钮在每个View Controller中的作用相同,但依赖于特定的View Controller及其Storyboard设置。

例如:

用户按下View Controller 1中的选项按钮[导航栏],将发生Segue xx1,导致从View Controller 1转换到Options View Controller。

...或

用户按下View Controller 2中的选项按钮[导航栏],将发生Segue xx2,导致从View Controller 2转换到Options View Controller。

(在这种情况下,每个View Controller都会显示相同的选项UI,但会通过不同的Segues。)

显然,这会复制功能,引入复杂性并且不会扩大规模。

我应该如何设计/重构这一点,以便按下出现在2或3或n个视图控制器中的按钮,每个按钮具有相同的行为,但没有重复的代码和故事板纠缠?

这有典型的模式吗?欢呼声。

1 个答案:

答案 0 :(得分:0)

一个选项是为ViewController1和ViewController2创建一个超类,在那里实现常见行为的逻辑(例如选项按钮)并指定常用的设计元素,在这种情况下你不会有冗余代码您可以通过再次进行子类化,向标签栏控制器添加更多视图控制器。