2012-02-13 29 views
1

我正在開發一個iOS應用程序,剛纔有一個選項卡欄導航。我怎樣才能讓一個選項卡欄按鈕引用iOS中的兩個視圖/控制器

我有兩個屏幕顯示相同的信息,但以不同的格式(比如列表和網格)。

這兩個屏幕是不同的,他們需要單獨的控制器。

用戶可以從頂部的共享控制欄按鈕(切換)在兩個視圖之間切換。

場景:

用戶按下首次「位置」按鈕,它顯示的地方爲列表。 他們按「網格」查看顯示爲網格的相同地點。
用戶按下另一個選項卡欄按鈕導航到不同的屏幕。 當他們再次按下「地點」按鈕時,應用程序會記住他們上次查看的地點是網格,因此網格視圖會顯示出來。 用戶可以切換回列表視圖。 etc ...

任何人都可以推薦最好的方法來實現這一目標嗎?

回答

0

一種方法是使用一個視圖控制器來管理這兩個視圖。這樣,您就不必擔心同步數據或破壞UITabBarController的正常功能 - 只有一個控制器。此外,不要試圖超載該控制器的選項卡的含義。相反,向兩個視圖添加一個按鈕,以告知控制器切換到另一個視圖。這對您的構建會更容易,並且(更重要的是)更易於用戶理解。使熟悉的控件做不熟悉的技巧並不好。

如果您的視圖控制器將它們組合成一個會很複雜,那麼您可以使用兩個控制器,並通過修改標籤欄控制器的viewControllers數組來簡單地將它們交換進標籤欄。通過讓兩個控制器引用相同的數據模型,您仍然可以避免必須在它們之間同步數據。

+0

我是否正確地說,如果這些視圖中只有一個是表視圖,控制器類不應該從'UITableViewController'繼承?在這種情況下,最好添加一個協議? – bodacious 2012-02-13 21:55:54

+0

這是否會打破iOS最佳實踐(有一個控制器控制兩個視圖層次結構)? – bodacious 2012-02-13 22:17:44

+0

@bodacious考慮一下後,我已經更新了我的答案。如果兩個視圖如此不同以至於它們與視圖控制器的交互方式不同,那麼您可能是正確的,因爲它有單獨的控制器。儘管如此,我仍然避免使用該標籤在兩個控制器之間切換 - 這隻會讓用戶感到困惑。 – Caleb 2012-02-13 23:08:08

0

我試圖實現這個相同的事情,它實際上可以通過TabBarController,NavigationControllers,ViewControllers,push segues和unwinds的基本設置來完成。

 
TabBarController 
    |==> NavigationController --> PlacesController(grid view) --(push segue from nav bar)--> PlacesController(list view) 
    |==> NavigationController --> OtherController 
    |... 

確保從列表視圖控制器退回到網格視圖控制器。

如果您在視圖之間切換,然後轉到另一個選項卡(例如otherController)並返回,您將返回到您所看到的最後一個視圖,因爲這就是NavigationController堆棧的頂部。

相關問題