当我连接我的第一个相当复杂的Cocoa-Touch视图时,我觉得我无意中滑回旧的程序模式并发现很难摆脱它们......虽然完全了解许多Cocoa(OO)设计模式我担心我可能会颠覆它们。
因此,这个观点很快变得无法管理,我想知道我是否会以错误的方式接近它?!?该视图由 UIViewController 的子类管理。视图本身包含±10个子视图。这些子视图中的一些“滑入”进出,并包含随其一起滑动的子视图(控件,图像视图等)。
在没有深入细节的情况下,我发现我在我的根视图控制器的touchesBegan / Moved / Ended方法中执行了大部分(如果不是全部,包括动画)我的管理代码。并且它变得混乱的管理,设置&检查布尔属性。 if(editingMode& panelAVisible) .... if(editingMode& panelBVisible) ...或* if(viewFlipped){ for(MyCustomView view in someArrayOfSubviews)} 等等...授予此应用程序的UI需要将大部分这些视图(或其内容)触摸并由用户移动到该应用程序的不同部分屏幕。
我试图解决的主要问题似乎是:如果viewA存在,那么你会隐藏3个视图(动画)...或者,如果触摸了viewB,那么viewC中包含的所有对象都是负数......等等。
任何聪明(或基本)OO方法来处理这个问题?也许让包含视图的子视图充当他们自己的迷你视图控制器?我找不到太多(任何?)的例子,但是......
答案 0 :(得分:1)
正如您在问题的最后建议的那样,我建议您在需要特定子视图的逻辑时使用子控制器。控制器对象的要点是跟踪视图的状态并封装您描述的所有视图逻辑。界面操作,例如如果用户可以移动到不同的屏幕,可以调用保存逻辑,可以创建新文档,应该在控制器中为该特定视图。这将有助于保持各种控制器之间的关注点分离,并将错综复杂的逻辑降低到顶层。
虽然它与iPhone编程无关,但本书Cocoa Programming for Mac OS X包含在应用程序中使用子控制器和子视图的优秀示例(特别是在关于如何执行首选项窗口的章节中)。
答案 1 :(得分:0)
我认为你应该继续你的最后一个建议,让包含视图的子视图充当他们自己的迷你视图控制器。每个(子)视图呈现一个“充满内容的屏幕”可以/应该由它自己的视图控制器管理。
这些视图之间的动画可以使用内置控制器中的内置控件(您实际上可以隐藏导航控制器的顶部栏)来完成,这样您就可以使用默认的幻灯片动画。否则,您仍然可以在使用该导航控制器的同时创建自己的动画。
'视图本身包含±10个子视图'。其中一些子视图“滑入”进出[...]'。您正在谈论的这些子视图是从您的整体UIView中提取的完美候选者。
使用的基本OO原则是导航控制器如何通过在堆栈上推送和弹出视图来实现它。推送和弹出的每个视图都由其自己的视图控制器处理。
HTH
编辑:我现在看到你并没有特别谈论iPhone开发。不过,看看它是如何完成的(尤其是UINavigationController)。您仍然可以获得基本的设计理念