【发布时间】:2012-01-12 17:50:47
【问题描述】:
背景
我正在使用界面构建器为我正在开发的应用程序创建 UI。该应用程序有一个显示一系列按钮的屏幕。单击按钮会显示覆盖按钮的关联视图。单击另一个按钮会隐藏上一个覆盖视图并显示另一个。
在 IB 中管理 UI 也更容易,我决定为单击相关按钮时出现的每个子视图创建多个 nib 文件。然后,我使用 UINib 类在视图控制器的 viewDidLoad 方法中加载子视图的 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];
...
上面的代码对其他视图重复。
总而言之,我有一个单屏 iPhone 应用程序,它具有通过单击按钮显示/隐藏的分层视图。这是通过单个视图控制器实现的,该控制器具有关联的 nib 文件和一系列附加的 nib 文件,用于在视图控制器的 viewDidLoad 方法中加载的子视图。
问题!
很抱歉介绍太长,但我想非常清楚我在做什么。
- 我的方法不好还是不寻常?
- 这样做有什么潜在的问题吗?
- 当其他人需要动态界面和 仍想将所有内容保留在 Interface Builder 中?
备注
在有人问我为什么不在新屏幕上显示子视图并使用导航栏之前,让我说我有很好的理由并且我确实了解 iOS UI 指南。上面的用例并不完全是我的用例,但它清楚地描述了问题而不会陷入我的开发应用程序中。
此外,我知道我可以将所有子视图编写为代码,但每个子视图都有复杂的子视图布局,并且要尝试使它们看起来正确,会需要大量代码和混乱。
提前致谢。
【问题讨论】:
标签: ios ios4 uiview interface-builder nib