2010-04-22 72 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

相關問題