簡體   English   中英

如何在不同的iOS視圖之間共享控制器

[英]How to share controller amongst different iOS views

我來自C#wpf背景,您可以使用一個ViewModel處理多個視圖。 這是在不相關視圖之間共享數據的好方法。 但是我無法弄清楚如何在iOS中執行相同的操作,因為您似乎需要為每個視圖使用一個Controller。

我要實現的目標是有一個注冊序列,其中用戶一個接一個地填充5個數據屏幕。 我打算為此使用PageViewController,每次單擊Next會將它們轉移到序列中的下一頁。 一直以來,將所有輸入數據添加到一個父模型對象中(在所有五個屏幕中都存在),最后,您可以將整個批次提交到數據庫以進行注冊。

到目前為止,我唯一能看到的方法是創建五個單獨的ViewController,每個注冊屏幕用於一個ViewController,並創建導航邏輯以在單擊時顯示它們。 但是,這a)似乎過大了,b)意味着隨后的每個屏幕和Viewcontroller都不知道用戶在先前步驟中輸入的信息。

在iOS中執行此操作的正確方法是什么?

你可以通過很多方式做到這一點。 如果您想使用UIPageViewController,實際上可以為注冊過程的所有步驟使用一個視圖控制器。

主視圖控制器將實現協議UIPageViewControllerDataSource。 它有兩個必需的方法,它們返回內容視圖控制器的實例。 這些實例可以是任何UIViewController子類的,因此您可以具有五個單獨的視圖控制器類,或者可以具有同一類的五個實例。

Xcode有一個項目模板“基於頁面的應用程序”。 對於您來說,這可能是一個很好的示例代碼。 有一個類DataViewController,它為每個頁面實例化。 如果您的情況確實很簡單,那么這可能是最好的解決方案。

如果使用多個視圖控制器,則可以通過重寫prepareForSegue(segue:sender :)方法在它們之間傳遞數據。 UIStoryboardSegue對象可以訪問目標視圖控制器,您可以對其進行強制轉換並設置屬性。 (我假設您正在使用情節提要和劇集。)

另一種方法是不使用UIPageViewController並在一個視圖控制器中實現整個過程。 可能有一個包含五個容器子視圖的視圖。 最初將顯示第一個,然后顯示第二個,依此類推。 這需要在這些步驟之間進行手動導航,但具有很大的靈活性。 它還與MVVM更加一致,因為ViewModel和ViewController之間存在一對一的映射。

通常,iOS應用程序具有很多視圖控制器。 對於您而言,使用5個對我來說似乎並不過分。 它可能是更多的代碼,但復雜度卻更低。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM