2011-08-12 31 views
0

是否有可能一個UIView實例存儲莫名其妙地以這樣一種方式,它可以從其他視圖控制器來訪問?我知道這可能與他們說的「全局」接近,但我離題了。我所知道的是,我有一對UITabBar選項卡,它們需要引用在一個選項卡中實例化的視圖的同一個實例,並且需要在另一個選項卡中再次顯示。做這樣的事情最好的方法是什麼?顯示相同的UIView實例在不同UIViewControllers

+0

只是一個關於問題命名的提示,儘量簡化它,比如「在不同的UIViewControllers中顯示相同的UIView實例」 – Cyprian

+0

我很糟糕!無論如何,我現在已經更新到您的建議! :) (以前「存儲一個UIView實例,以便它可以在其他視圖控制器被其他視圖隱藏後調用)」 – purefusion

回答

1

肯定。您只需要將保留的引用存儲在持久對象中的UIView對象中。例如,您可以將保留屬性添加到UIApplicationDelegate子類中。您可以讓該委託實例化視圖,並且所有控制器都會嚮應用程序委託請求視圖。如果您有始終可用的根視圖控制器,則可以將其保留在那裏。

通過您的應用程序的整體結構也許在想能幫助找到「正確」的地方來存儲UIView。下面我介紹一個我經常使用的應用程序結構,並不一定是關於如何構建應用程序的建議,而是作爲擴展選項的示例,您可以考慮幫助您考慮最適合您的應用程序結構。

我寫了很多小冊子的應用程序一樣爲我們的客戶。在這些應用程序中,我需要提供一些意見,每種意見都與手冊中的頁面有點類似。這些視圖中的某些視圖將具有用戶交互,並且需要在屏幕外保留其狀態,或與其他視圖共享狀態數據。

爲了管理這些應用程序創建演示文檔管理對象。此對象將保留應用程序的整體狀態,包括未顯示時必須保留的視圖。我使用一個擁有演示管理器的主UIViewController,並負責所有常見的視圖控制操作。個別視圖的具體邏輯將在每個視圖的UIView子類中進行。這些單獨的視圖由演示文稿管理器創建,並可以向該管理器詢問所知道的內容,包括任何持久性視圖。

+0

是的,聽起來像我的應用程序與您的應用程序非常相似,它需要執行的操作...在屏幕外保留視圖的狀態。 – purefusion

0

B/C讓你使用UITabBar我會建議您的自定義視圖添加到窗口的應用程序委託。那麼你不必存儲它,只是隱藏它。您可以使用NSNotificationCenter發送通知來顯示視圖,也可以調用您的appDelegate並手動顯示視圖。

1

你可以使用依賴注入,在同一視圖實例注入到視圖控制器是這樣的:

UIView *myView = [UIView new]; 
UIViewController *controller1 = [UIViewController new]; 
UIViewController *controller2 = [UIViewController new]; 
controller1.view = myView; 
controller2.view = myView; 
[myView release]; 
+0

@Abhinit:當然,只是更新了我的答案:) –

+0

有趣。我沒有想到做這樣的,但我敢肯定,這不會與UITabBar意見工作,因爲的UITabBarController將獨立的情況下我會實例使用上面的代碼的實例每個選項卡的本身看法。任何想法如何解決這個問題? – purefusion

相關問題