【发布时间】:2011-02-11 07:03:26
【问题描述】:
我有一个 VC 控制具有 2 种模式的内容屏幕;普通模式和编辑模式。
我能否创建一个具有 2 个视图的单个 VC,每个视图都来自不同的 nib?
在 iphone 上的许多情况下,您都有一个控制关联视图的 VC。然后上 按下按钮或其他事件,加载新的 VC,其视图变为顶级视图等。
但在这种情况下,我有 2 种模式我想使用相同的 对于VC来说,因为它们关系密切。所以我想要一个可以换入/换出 2 个视图的 VC。
根据这里: How to load a UIView using a nib file created with Interface Builder
我发现我可以从 nib 加载具有关联视图的 VC,然后再加载 与另一个 nib 不同的视图,并使该新视图成为活动视图。
NSArray *nibObjects = [[NSBundle mainBundle] loadNibNamed:@"EditMode" owner:self options:nil];
UIView *theEditView = [nibObjects objectAtIndex:0];
self.editView = theEditView;
[self.view addSubview:theEditView];
辅助笔尖的插座与主笔尖一样连接到 VC。当新笔尖被加载时, 插座都连接良好,一切正常。不幸的是,当这个编辑 然后删除视图,似乎没有任何优雅的方式来连接插座 再次从原始笔尖进入(正常模式)视图。笔尖加载和出口设置似乎 只有一次。
那么,如果你想要一个 VC 换入/换出 2 个视图而不创建新的 VC,有哪些选择?
1) 您可以在代码中完成所有操作,但我想使用 nib,因为它使创建 UI 更简单。
2) 您的 VC 有 1 个 nib,只需使用 UIView 及其子类的 hidden 属性隐藏/显示元素。
3) 如上所述加载新笔尖。这对新笔尖来说很好,但是当你回到原来的笔尖时,你如何对插座进行排序。
4) 放弃并接受 VC 和 nib 之间的 1:1。有一个用于普通模式的 nib,一个用于编辑模式的 nib,每种模式都有一个 VC,该 VC 是一个公共超类的子类。
最后,我选择了 4) 并且它可以工作,但需要相当多的额外工作,因为我有一个模型类,我在正常模式下实例化,然后必须传递到编辑模式 VC,因为这两种模式需要访问模型。我也在使用 NSTimer 并且必须在每种模式下启动和停止计时器。正是因为所有这些共享功能,我首先想要一个带有 2 个 nib 的单个 VC。
【问题讨论】:
标签: iphone uiviewcontroller nib