2013-08-02 21 views
3

自从iOS 5.0引入了childViewControllers的概念以来,它似乎可以完成所有工作,我习惯使用UIView来处理xib文件。应该停止从xibs加载UIView?

场景的地方我通常会使用UIView并让它包含xib文件中的所有内容。如果有任何需要实现的委托和数据源,UIView用于加载。

这样使用的东西:

NSArray* nibsArray = [[NSBundle mainBundle] loadNibNamed:@"ABCustomLoginView" owner:self options:nil]; 
     if(nibsArray && [nibsArray count] > 0)  { 
      self = [[nibsArray objectAtIndex:0] retain]; 
     } 

这似乎永远是正确的,它用来打破的MVC。 为什么UIView会处理另一个UIView的事件?

既然childViewController的存在,我是否应该总是制作一个尺寸合适的UI片段,它具有自己的功能,并且可以稍后重新用于单独的UIViewController?

或者有些情况下,以前的方法仍然有优势?

回答

0

当您构建自定义容器视图控制器时,您应该只使用子视图控制器,或者您的布局非常复杂。

现在我认为:我总是使用故事板,因为它们允许您在设计时全部显示整个屏幕,而无需在运行时组装它(如上面的代码)。

因此,即使您选择为每个单独的视图控制器使用故事板(某些大型团队都这样做以避免合并问题),您可以将所有视图和视图控制器布置并连接在一起。

如果你想在运行时创建一个特定视图的动态数字,我可能只是编码视图,或者如果它非常复杂,我会将一个NSNib存储在一个ivar中,并从中实例化每个视图。

底线:子视图控制器绝不会取代或甚至与您的代码示例有关,如何使用它来执行此操作。

+0

我正在谈论的情景中,您有一个可重复使用的部分屏幕,您可以在多个屏幕中重复使用。 它在iPad应用程序中很常见。 在多个地方使用它,并避免编写它的用户界面,我曾经使用一个笔尖,并加载该笔尖作为customView的子视图。 在大多数情况下,如果该视图具有tableView,则customView将处理tableView的委托。 在这样的情况下,不会childViewControllers是一个完美的选择? 其类似于android中片段的概念。 –

+0

我明白了。是的,这是一个有效的子视图控制器应用程序。在原始问题中,你认为视图不应该处理其他视图事件是正确的,因此在这种情况下,子视图控制器将拥有其视图并处理其事件。 (我仍然会从故事板加载子视图控制器)。如果你是一个小团队,我将把它全部放在一个故事板中,并将所有的子视图容器对象指向在多个位置使用的子视图控制器的“场景”。 – atomkirk

+0

好。故事板很好。我不是在讨论storyboard或xib。我的观点是在UIViews和childViewControllers之间进行选择。 虽然故事板是我还没有在项目中使用的东西,但是如果有多个人试图捣乱故事板,恐怕会出现git冲突。 这只是整个项目的一个文件。对 ? 即使我们将其分解成多个故事板,我们也会失去使用故事板本身的目的。 –