2010-04-22 41 views
3

我有一个VC控制有2种模式的内容屏幕;一个正常模式和一个编辑模式。视图控制器可以管理多个基于nib的视图吗?

我可以用两个视图创建一个VC,每个视图都来自单独的笔尖?

在iphone的许多情况下,你有一个控制关联视图的VC。然后在 按下按钮或其他事件,一个新的VC是加载和角度的顶层视图等

但是在这种情况下,我有2种模式,我想用同样的 VC的,因为他们密切相关。所以我想要一个可以交换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的情况下交换2个视图的VC,那么有什么选择?

1)你可以在代码中做所有事情,但我想使用nibs,因为它使得创建UI更简单。

2)您的VC有1个笔尖,只是使用UIView及其子类的隐藏属性隐藏/显示元素。

3)如上所述加载新的笔尖。这对新的笔尖来说很好,但是当你回到原来的笔尖时,如何分类出口。

4)放弃并接受VC和笔尖之间的1:1。正常模式有一个笔尖,编辑模式的笔尖,每个模式都有一个VC,它是一个通用超类的子类。最后,我去了4),它工作,但需要相当多的额外工作,因为我有一个模型类,我在正常模式下实例化,然后必须传递到编辑模式VC,因为两者模式需要访问模型。我也使用NSTimer,并且必须在每种模式下启动和停止计时器。这是因为所有这些共享功能,我首先需要一个带有2个笔尖的VC。

回答

0

我只是将的另一个视图添加到您的原始笔尖,然后将其连接到另一个名为“editView”的IBOutlet。

@interface TestViewController : UIViewController { 
    IBOutlet UIView *editView; 
} 
@end 

alt text

然后你就可以可以做一个[self.view addSubview:theEditView]。每当你需要展示它。

+0

嗨布拉德,我想这可能是一种可能性,但最好的做法是保持每个笔尖尽可能小,也有很多网点指向我的主要或编辑视图中的元素,所以要么我有有重复的网点可以这么说,否则我会在[查看removeFromSuperview]后回到网点重新连接问题。现在要坚持使用我的子类化方法,但是要想到这个想法。 – Brynjar 2010-05-03 13:10:27

相关问题