在我正在研究的iPhone应用程序中,我想要两个视图控制器(我称之为A和B),以便拥有外观和功能相同的工具栏。有问题的工具栏将如下所示:
[(button) (flexible-space) (label)]
为了后人,标签实际上是一个带有自定义视图的UIBarButtonItem。 我的设计要求A总是直接出现在导航堆栈上的B之前,因此如果没有加载A,B将永远不会加载。鉴于这种布局,我开始想知道,
我认为,我的选择是:
1.不要担心重复使用,两次创建工具栏项目
2.在A中创建工具栏项,并在自定义初始化程序中将它们传递给B.
3.在推动视图控制器时,使用一些我没有想到的更加模糊的方法来保持工具栏不变
据我所知,选项1可能违反了 DRY ,但保证不会因为(例如)按钮可能需要执行两次而失去任何混淆在将来的应用程序版本中,任何一个视图控制器的功能都不同(无论多么相似)。如果发生这种情况,选项2或3将要求在加载和卸载B时按钮的目标操作发生变化。即使按钮从不需要执行不同的功能,我也不确定在选项2下它的正确目标是什么。
总而言之,这不是一个大问题,即使我必须使用选项1.我可能无论如何都要过度思考,尝试应用依赖注入模式这是不合适的。我只想知道最佳实践,如果这种情况以更极端的形式出现,比如长链视图控制器需要使用相同的(在外观和功能上)UI元素。
答案 0 :(得分:2)
这确实取决于未来事情的变化。假设目前(最多)标签中的文本和操作的目标可能会发生变化,我会倾向于重用的方向。我在这种情况下实际做的是为我的视图控制器创建一个公共基类,它有一个用于创建工具栏项的实用工具方法。它们既可以通过编程方式创建,也可以从笔尖中提取。无论哪种方式,这对于将来重用(只是子类另一个控制器)或分歧(移除超类关系并在已更改的控制器上实现特定于情境的工具栏)非常灵活。