背景
我正在使用界面构建器为我正在开发的应用程序创建用户界面。该应用程序只有一个屏幕,显示一系列按钮。点击按钮会显示相关视图,该视图覆盖在按钮上方。点击另一个按钮会隐藏先前的覆盖视图并显示另一个视图。
为了在界面构建器中更轻松地管理UI,我决定为每个子视图创建多个nib文件,并在视图控制器的viewDidLoad
方法中使用UINib
类加载子视图的nib文件。
这样做的想法是避免在单个nib文件中堆叠多个视图,因为这在界面构建器中很难操作。我本可以在代码中创建所有视图,但由于每个子视图的布局都相当复杂(具有多个子视图),这将需要大量繁琐的编码。
以下是示例代码,用于从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 文件,用于在 view controller 的 viewDidLoad 方法中加载子视图。
问题:
抱歉介绍太长了,但我想非常清楚地表达我的做法。
1. 我的方法是否不好或不寻常? 2. 这样做有什么潜在的问题吗? 3. 当他们需要动态界面并且仍然想保持所有内容在界面构建器中时,其他人都做了什么?
注意:
在任何人问为什么我不只是在新屏幕上显示子视图并使用导航栏之前,让我说我有非常好的理由,并且我了解 iOS UI 指南。上面的用例并不完全是我的用例,但它清楚地描述了问题,而没有陷入我的开发应用程序。
此外,我知道我可以将所有子视图编写为代码,但每个子视图都有一个复杂的子视图布局,尝试使它们看起来正确会产生大量的代码和混乱。
提前感谢。