2014-02-14 123 views
1

我需要在iOS應用中創建導航,如下面的截圖所示。帶側面菜單的iOS導航

enter image description here

它包含一個標籤欄和側菜單。

問題是正確的導航菜單按鈕,應該在所有選項卡中可見。即使是每個標籤的所有內屏。

當用戶從側面菜單中選擇一個選項時,它應該顯示在屏幕上。

現在每個選項卡應該可以從每個選項項訪問,並且每個選項菜單都應該可以在每個選項卡中訪問。它就像DB中的多對多關係一樣。

我應該如何設計它?

我到目前爲止嘗試過。

  1. 在每個選項卡中,有一個containerViewController。其中包括我的FrontViewControllerSideMenuViewController
  2. 當從側面菜單中選擇一個選項時,會將消息傳遞給containerViewController,該消息從視圖中刪除舊的FrontViewController並添加新的OptionViewController
  3. 菜單按鈕和導航欄被添加到containerViewController,這樣,如果應該每次在任何屏幕上都可見。

問題

現面向使用這種方法的一些問題。

  1. 隨着導航欄被添加到containerViewController。我可以使用我的FrontViewControllerparent財產訪問它。假設如果我需要在我的FrontViewController中使用PushViewController,我必須使用parent屬性。像這樣

    [self.parent.navigationController pushViewController:newVC animated:YES ]; [self.parent.navigationController popViewControllerAnimated:YES];

  2. 我必須使用每個選項卡中的這種方法。手段代碼重複5次。

任何人都可以提出一個簡單的解決方案。任何幫助表示讚賞。

回答

2

我會考慮子類化UINavigationController並在那裏添加按鈕管理邏輯。當任何視圖控制器被推入導航控制器時,設置其條形按鈕項目。

側面菜單不應位於每個選項卡內。您的根視圖控制器應該真正控制主視圖和側視圖,並且主視圖具有您的選項卡控制器,其中有一個導航控制器作爲每個選項卡的根。

既然導航欄不需要由不同的容器控制器進行管理,事情就變得簡單了。

酒吧按鈕動作只推送到根視圖控制器,當創建導航控制器時可以設置對其的引用。選項選擇將遍歷根VC - >主(選項卡)VC - >選擇選項卡導航控制器 - >推。

+0

感謝您的回覆。我必須嘗試這個並在這裏更新。 – Khawar

-1

對於iOS側的菜單,如APMultiMenu,使用cocoapod可能更容易。我已經使用它,它使用簡單,並遵循

+0

請不要給只有鏈接的答案。鏈接可以隨時中斷 –

3

您可以嘗試使用InteractiveSideMenu爲您的目的。它支持交互式打開/關閉菜單和以下的定製:

  • 動畫的持續時間
  • 可見內容寬度
  • 內容規模
  • 使用彈簧動畫使用參數定製像動畫曲線
  • 動畫選項

你應該使用3個基本的ViewControllers來創建子類來實現你的s ide菜單。

  • MenuContainerViewController爲菜單和內容視圖的宿主
  • MenuViewController爲菜單視圖
  • MenuItemContentControlller一個容器被用於內容的容器對應的菜單項

這裏是設置的一個例子主控制器。

import InteractiveSideMenu 

class HostViewController: MenuContainerViewController { 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     self.menuViewController = self.storyboard!.instantiateViewController(withIdentifier: "NavigationMenu") as! MenuViewController 

     self.contentViewControllers = contentControllers() 

     self.selectContentViewController(contentViewControllers.first!) 
    } 

    private func contentControllers() -> [MenuItemContentViewController] { 
     //here is instantiation of content view controllers 
    } 
}