2010-09-28 71 views
0

Blarg!iPhone擁有與一個視圖控制器相關的兩個視圖

我試圖開發一個類似塞爾達的遊戲。 (即,當PC擊中屏幕邊緣時,屏幕切換到下一個視圖,並且PC的位置在相應的邊緣重新開始。)

我遇到的問題是我不想擁有因爲所有數據/功能都存在於原始的「LevelView」控制器中,所以每個級別段都有多個視圖控制器。如何保留這個「LevelView」控制器的代碼,同時只切換NIB文件? (即我想要在那裏的唯一類是AppDelegate,「LevelView」,「ItemView」等)。我不希望爲遊戲中的每個NIB文件重新創建視圖控制器。

我很感激你可以提供的任何幫助!非常感謝你! :D

回答

1

創建一個只包含新視圖的NIB文件。將NIB文件中文件所有者的類更改爲LevelView控制器的類。當您想要加載新的NIB文件時,請從LevelView控制器中調用以下代碼:

NSArray *topLevelObjects = [[[NSBundle mainBundle] loadNibNamed:@"Put your nib file name here" owner:self options:nil]; 
UIView *newLevelView = [[topLevelObjects objectAtIndex:0] retain]; 

這是幹什麼的?當你調用loadNibNamed時,它會返回NIB文件中頂層對象的數組。 「文件所有者」和「第一響應者」代理對象不計爲頂級對象。所以,你會得到一個只有NIB文件中頂層視圖的數組。您將自己作爲文件所有者傳遞,以便您在頂層視圖的子視圖和界面構建器中的「文件所有者」之間建立的任何插座連接都已連接。

如果您將頂層視圖連接到視圖控制器中的插座,則不需要對返回的數組loadNibNamed執行任何操作。只要忽略它,它就會自動釋放(它會以保留計數0返回給您)。

現在,我認爲這樣做是一個壞主意。我認爲有更好的方法來設計你的應用程序。例如,創建描述級別的數據文件(例如屬性列表或XML文件)比將所有級別放入NIB文件更有意義。但是,如果你真的想這樣做,上面的東西應該讓你開始。

+0

嗯...當我把代碼的上半部分,它仍然加載第二個視圖,即使不必從數組中調用它。 (我把代碼放在「ViewDidLoad」方法內部,也許這是爲什麼?)我喜歡這種將我的NIB引入數組的方法,所以我可以爲每個「Map Segment」調用合適的字符應該是英寸再次,爲什麼新的視圖加載甚至只有一半的代碼寫入?非常感謝您的幫助! :D – user298261 2010-09-28 23:30:44

+0

啊,明白了!將第二個視圖附加爲視圖控制器的「視圖」插座。我還在你寫的第二行下面添加了「self.view = newLevelView」代碼,因爲編譯器抱怨那個變量未被使用。再次感謝你的幫助! :D – user298261 2010-09-28 23:35:45

+0

Hmm ....所以每個視圖都包含在它自己的數組中......每個數組都可以作爲一個Dictionary內的對象存檔...然後爲角色所在的任何級別段調用正確的字典對象?這個邏輯是正確的嗎? – user298261 2010-09-29 00:23:10

1

使用NSUserDefaults並從那裏得到它。

相關問題