我有一个VC控制一个有两种模式的内容屏幕;正常模式和编辑模式。
我可以创建一个包含2个视图的VC,每个视图来自不同的笔尖吗?
在iphone的许多情况下,你有一个控制相关视图的VC。然后 按下按钮或其他事件,加载新VC并将其视图变为顶级视图等。
但在这种情况下,我有2种模式,我想使用相同的 VC for,因为它们密切相关。所以我想要一个可以交换2个视图的VC。
按照这里: How to load a UIView using a nib file created with Interface Builder
我发现我可以从笔尖加载带有关联视图的VC,然后再加载 与另一个笔尖不同的视图,并将该新视图作为活动视图。
NSArray *nibObjects = [[NSBundle mainBundle] loadNibNamed:@"EditMode" owner:self options:nil];
UIView *theEditView = [nibObjects objectAtIndex:0];
self.editView = theEditView;
[self.view addSubview:theEditView];
辅助笔尖的插座连接到VC,就像主笔尖一样。加载新笔尖时 这些网点都很好,一切都很好。不幸的是,当这个编辑 视图然后被删除,似乎没有任何优雅的方式来连接出口 再次从原始笔尖的(正常模式)视图。笔尖装载和出口设置似乎是一个 曾经只是一件事。
所以,如果你想让VC在不创建新VC的情况下交换2个视图,那么有哪些选择?
1)您可以在代码中执行所有操作,但我想使用nib,因为它可以使创建UI更简单。
2)你的VC有1个笔尖,只需使用UIView及其子类的隐藏属性隐藏/显示元素。
3)如上所述加载新笔尖。这对新笔尖很好,但是当你回到原来的笔尖时,如何对笔芯进行排序。
4)放弃并接受VC和笔尖之间的1:1。正常模式有一个nib,编辑模式有一个nib,每个模式都有一个VC,它是一个公共超类的子类。
最后,我选择4)并且它可以工作,但是需要相当多的额外工作,因为我有一个模型类,我在正常模式下实例化然后必须传递到编辑模式VC因为两种模式需要访问模型。我也在使用NSTimer,并且必须在每种模式下启动和停止计时器。正是由于所有这些共享功能,我首先想要一个带有2个笔尖的VC。
答案 0 :(得分:0)
我只需将另一个视图添加到原始笔尖,然后将其连接到另一个名为“editView”的IBOutlet。
@interface TestViewController : UIViewController {
IBOutlet UIView *editView;
}
@end
然后你可以做一个[self.view addSubview:theEditView];无论何时你需要展示它。