Cam*_*oft 7 interface-builder uiview nib ios4 ios
背景
我正在使用界面构建器为我正在处理的应用程序创建UI.该应用程序有一个显示一系列按钮的屏幕.单击按钮可显示覆盖按钮的关联视图.单击另一个按钮会隐藏上一个叠加视图并显示另一个.
在IB中更容易管理UI我决定为每个子视图创建多个nib文件,这些文件在单击相关按钮时显示.然后我viewDidLoad使用UINib该类在视图控制器的方法中加载子视图的nib文件.
这背后的想法是避免在单个nib文件中将多个视图堆叠在彼此之上,因为这在IB中难以操纵.我本可以在代码中创建所有视图,但这需要大量繁琐的编码,因为每个子视图的布局都非常复杂(具有多个子视图).
从nib文件加载子视图的示例代码.
- (void)viewDidLoad
{
UINib *aSubViewNib = [UINib nibWithNibName:@"aSubView" bundle:nil];
NSArray *bundleObjects = [aSubViewNib instantiateWithOwner:self options:nil];
// get root view from bundle array
UIView *aSubView = [bundleObjects objectAtIndex:0];
[self.view addSubview:aSubView];
...
Run Code Online (Sandbox Code Playgroud)
对于其他视图重复上面的代码.
总结一下,我有一个单屏iPhone应用程序,它具有通过单击按钮显示/隐藏的分层视图.这是通过一个视图控制器实现的,该控制器具有关联的nib文件和一系列用于子视图的附加nib文件,这些文件在视图控制器的viewDidLoad方法中加载.
问题!
很抱歉很长时间的介绍,但我想非常清楚我在做什么.
笔记
在有人问我为什么不在新屏幕上显示子视图并使用导航栏之前,让我说我有很好的理由,我确实理解iOS UI指南.上面的用例并不完全是我的用例,但是它可以清楚地描述问题而不会陷入我的开发应用程序中.
另外我知道我可以将所有子视图编写为代码,但每个子视图都有一个复杂的子视图布局,这将是很多代码和乱七八糟的尝试让他们看起来正确.
提前致谢.
视图控制器和视图之间不一定存在一对一的关系。大多数视图都包含许多子视图,这些子视图本身就是视图,因此这实际上没有意义。
但是,根据视图的复杂性(包括其内容),您可能需要单独的视图控制器……也可能不需要。
例如,如果您有两个 sbuview,每个 sbuview 都是 tableView,则您可能希望每个 tableView 有一个视图控制器。这是因为每个 tableView 都查看相同的委托方法,并且如果它们位于同一 viewController 中,则委托方法必须区分 tableView。委托方法具有允许这样做的签名,但是根据我的经验,它确实会导致难以遵循和管理的混乱代码设计。
另一方面,您可能有两个由同一个 viewController 管理的表,其中一个表填充了有意义的数据,另一个表只是一个占位符(当数据源为空时)。其中一个可能可见,而另一个则不可见。当两个视图控制器都由相同的数据源(模型)驱动时,为什么要通过创建两个视图控制器来让你的生活变得复杂呢?
在我看来,这取决于遵循和管理代码的难度。如果使用单个视图控制器的复杂性变得繁重,请考虑使用更多视图控制器。
更新
顺便说一下,我目前正在使用的一个例子可能可以说明类似的情况。在许多开发人员使用的 InAppSettingsKit 中,有几个用于主视图部分的 xib 文件。您可以在 github 上查看该结构。有一个主视图控制器和几个 xib 文件。(还有我所说的“帮助器”视图控制器和电子邮件编辑器视图控制器。)在此示例中,xib 文件可以多次使用来指定表视图单元格的布局。不过,每个 xib 文件都没有视图控制器。(InAppSettingsKit 的文档很少,因此仅快速浏览一下这些内容可能并不明显。)
| 归档时间: |
|
| 查看次数: |
8503 次 |
| 最近记录: |