2010-07-22 55 views
1

我有一個UIViewController* compViewController,它在相同視圖的兩個副本之間切換(兩個視圖之間的差異很小)。 目前,兩個視圖都來自同一個xib文件。 xib文件包含相同視圖層次結構的兩個幾乎相同的副本。其中一個副本「主要副本」連接到compViewController中的視圖出口。 第二個視圖連接到compViewController中的auxView插座。視圖控制器選擇顯示一個或另一個視圖。其實,這個描述是對實際情況的過於簡單化。實際上,兩個視圖中的一個被作爲「overlayView」傳遞給UIImagePickerController,該視圖被compViewController作爲模態控制器推送。加載xib(nib)文件兩次以獲得兩個不同的視圖實例

這種方法證明是一種維護噩夢,因爲任何對一個視圖的更改都需要在其他視圖中複製。

我在想的一個可能的解決方案是從筆尖移除一個視圖層次副本,然後加載筆尖兩次以獲得視圖的兩個副本。然後在compViewController的viewDidLoad方法中以編程方式進行必要的更改,然後將其作爲覆蓋到UIImagePickerController的方式傳遞。

我在UIKit擴展類別中使用了NSBundle的loadNibNamed方法(我認爲這是一個僅限於iPhone的類),它需要一個所有者。如果所有者是同一個ViewController,那麼結果對象是同一個對象,即爲具有相同所有者的sam xib調用兩次loadNibNamed返回相同的確切實例。我相信我需要兩個單獨的實例,就像過去一樣,我試着將compViewController使用的視圖的相同實例傳遞給ImagePicker,併發生各種不好的事情。然後我讀到,你不應該在不同的UIViewContollers之間共享UI對象,至少不要將ViewController同時推入同一個NavigationController。

我錯過了一個更好的方法嗎?

非常感謝您對我的任何建議。

+0

你是什麼意思的「兩個意見之間的小差異」? – Adri 2010-07-22 20:10:20

+0

現在我已將兩個視圖之間的差異分解爲單獨的nib文件。所以現在這兩個視圖是相同的,我試圖通過加載筆尖兩次從同一個nib文件加載它們。 – eddy 2010-07-24 05:57:57

回答

0

我的理解是一個筆尖擁有一個viewController,只能有一個所有者。我從筆尖移開,並開始用代碼構建所有東西。在開始時它需要做更多的工作,但是由於我發現了筆尖限制,所以它更具可重用性和強大功能。