2011-09-13 36 views
1

我有一個應用程序計劃出來,需要在整個應用程序中有一個自定義菜單。它不是一個工具欄或類似的東西,所以我不認爲常規的UINavigationController或UITabBarController會完成這項工作。iOS自定義菜單(導航控制器?)

什麼是創造出現在所有視圖此自定義菜單,最好的辦法?我想用自定義菜單創建一個視圖,併爲每個視圖分配它,但它似乎有點矯枉過正。擴展UINavigationController也可能是一個選項,但我不確定。

很想聽聽你的意見。

謝謝! :)
Shai。

+2

我能想到的兩種選擇:1.子類的UINavigationController,隱藏標準UINavigationBar的的觀點,並創建自己的觀點,並把它放在它上面(醜陋的,誰知道結果會落得像)。 2.將菜單添加爲UIWindow的子視圖,以便它始終位於整個應用程序的所有內容之上。 –

+0

通過UIWindow推出一個視圖可能是一個好主意,不好研究它。謝謝:) –

+0

我會發布這個答案:) –

回答

0

我能想到的兩種選擇:1.子類的UINavigationController,隱藏標準UINavigationBar的的觀點,並創建自己的查看並將其放在最上面(醜陋,誰知道結果最終會如何)。 2.將菜單添加爲UIWindow的子視圖,以便它始終位於整個應用程序的所有內容之上。

+0

,容器視圖控制器可能是一個更好的方法來做到這一點。 http://www.objc.io/issue-1/containment-view-controller.html提供了一個易於遵循的例子。 – 2014-09-03 10:48:09

0

我認爲最好的方法是創建一個自定義工具欄和整個應用程序中使用它。繼承UINavBar是另一種選擇,但不是由Apple推薦的,所以我不會去那裏。

+0

我認爲它不適用於這種特定的情況,因爲自定義菜單的位置在底部的一個角落,並有一些奇怪的自定義形狀,而不是工具條形狀... –

+0

你可以放置這個自定義不管你想要什麼,都可以隨心所欲地玩弄它的形狀。 – TommyG

+0

那麼這將如何不同於在應用程序中使用自定義的UIViewController?同樣的事情或多或少,不是嗎? –

0

我會考慮使用一個酥料餅風格的菜單,如WEPopover

+0

嗯,我不認爲這就是我要找的東西......如果它不是永久性的,那麼它不會解決我的問題。我想我會先嚐試@Javier Soto的解決方案 –

1

我ADE同意。我認爲添加到共享類的popover控制器最適合iOS風格(我將它放在AppDelegate中以便從任何地方引用它,並避免創建多個實例並僅使用一個將繼續顯示/躲在每當你想看到菜單)

+0

與僅添加自定義視圖作爲子視圖有什麼不同?我仍然必須在新屏幕的每個viewDidLoad上執行它,不是嗎? –

+0

nope。假設您在AppDelegate applicationDidFinishLaunching方法中初始化它,並保留它作爲appDelegate類的屬性。無論何時您需要在任何地方展示它,您只需要從您的類中調用[[[[UIApplication sharedApplication]委託] .YourPopoverController presentPopoverFromRect:inView:allowedArrowDirections:animated:]。這將使用該唯一對象(實例),而不是在要顯示它的類中的每個ViewDidLoad方法中重新創建視圖。 – Vlad

+0

此外,處理彈出式窗口將證明是一個自定義創建的視圖(自動解僱,當點擊它的窗口之外,有委託,等等)更容易 – Vlad

2

的UINavigationController的和的UITabBarController是幾乎總是去,因爲他們有視圖和內置內存管理的最佳途徑這裏是你可以做什麼:

  1. 創建隱藏標籤欄的UITabBarController的子類。查看本頁最新的帖子:http://www.iphonedevsdk.com/forum/iphone-sdk-development/4091-uitabbarcontroller-hidden-uitabbar.html使這個UITabBarController可以在一個單例對象上訪問。
  2. 爲您的菜單和與菜單按鈕對應的一些IBA創建一個視圖。
  3. 當按下菜單按鈕,可以手動切換的UITabBarController的標籤如下:tabBarController.selectedIndex = x;
+0

這聽起來也是一個好主意,以及我只是試圖推動視圖通過UIWindow,它也適用於我的需求,所以我可能只是堅持並使用隱藏的導航控制器來實際執行從iOS 5.0導航 –