2015-04-03 110 views
2

我一直在嘗試做一個左滑出菜單幾天。我不能得到任何的庫與我的應用程序工作,所以我使出raywenderlich的教程:快速滑出菜單,無需滑動導航欄(編程)

http://www.raywenderlich.com/78568/create-slide-out-navigation-panel-swift

但是,它不會做我想要什麼。我的主要問題是,當我滑出菜單時,導航欄隨之滑出。我需要我的導航欄保留它的位置,並且只將其下面的內容移動。

我試過「self.view.bringSubviewToFront(navigationController.navigationBar)」但那沒用。

這裏是什麼,我試圖完成的屏幕截圖。

enter image description here

我目前的設置是使用在我appDelegate's didFinishLaunchingWithOptions`設置ContainerViewController發:

window = UIWindow(frame: UIScreen.mainScreen().bounds) 

    let containerViewController = ContainerViewController() 

    window!.rootViewController = containerViewController 
    window!.makeKeyAndVisible() 

    return true 

這ContainerViewController越來越2個childViewControllers。

的CenterViewControllerController(我的內容)

的CenterViewController將有navigationController正確設置。

var centerNavigationController: NavigationController! 
var centerViewController: CenterViewController! 

ContainerViewControllerviewDidLoad

override func viewDidLoad() { 
    super.viewDidLoad() 

    centerViewController = UIStoryboard.centerViewController() 
    centerViewController.delegate = self 

    // wrap the centerViewController in a navigation controller, so we can push views to it 
    // and display bar button items in the navigation bar 
    centerNavigationController = NavigationController(rootViewController: LandingPageVC()) 
    view.addSubview(centerNavigationController.view) 
    addChildViewController(centerNavigationController) 

    centerNavigationController.didMoveToParentViewController(self) 

    let panGestureRecognizer = UIPanGestureRecognizer(target: self, action: "handlePanGesture:") 
    centerNavigationController.view.addGestureRecognizer(panGestureRecognizer) 
    } 

和SidePanelViewController(我的菜單&的問題之一)

var leftViewController: SidePanelViewController? 

    func addLeftPanelViewController() { 
    if (leftViewController == nil) { 
     leftViewController = SidePanelViewController() 

     addChildSidePanelController(leftViewController!) 
    } 
    } 

    func addChildSidePanelController(sidePanelController: SidePanelViewController) { 
    println("addChildSidePanelController") 

    view.insertSubview(sidePanelController.view, atIndex: 0) 

    addChildViewController(sidePanelController) 
    sidePanelController.didMoveToParentViewController(self) 
    } 

SidePanelViewController目前沒有一個navigationController。我曾嘗試添加它。但是這並沒有達到預期的結果。

根據該意見,我需要做的就是以某種方式使ContainerViewController具有navigationController的人,所以什麼都的它childControllers應該有呢?但我不知道如何去添加該級別的navigationController。

任何幫助將不勝感激! (我沒有使用故事板)

圖書館我想:

ENSwiftSideMenu(沒有我想要的東西。但是,花了2天嘗試使它沒有結果工作)

布賴恩降臨的YouTube教程

Dekatotoro的SlideMenuControllerSwift

wanaya /滑動菜單

SWRevealViewController斯威夫特

+1

假設它是需要嵌入到導航控制器中的ContainerViewController,這是正確的。您只需在應用程序委託中使用ContainerViewController作爲其rootViewController實例化導航控制器。然後使導航控制器成爲窗口的rootViewController。子控制器不應該嵌入到他們自己的導航控制器中(如果我明白你想要什麼,但這取決於你在MenuController中選擇菜單項時想要發生什麼)。 – rdelmar 2015-04-03 22:42:55

+0

順便說一下,這條線應該做什麼:'centerViewController = UIStoryboard.centerViewController()'? UIStoryboard沒有這個功能,無論如何,我還以爲你沒有使用故事板。 – rdelmar 2015-04-03 23:00:28

+0

@rdelmar我會試着看看我不能這樣做。我想我知道我該如何去做:),至於故事板的東西。雷的檔案有他們。我還沒有弄清楚如何在不破壞東西的情況下完全刪除他的故事板,但那不是我現在的主要問題。這些功能是他在擴展中指定的一些功能。但我不使用它們。只是現在刪除它們會導致錯誤。我還有其他幾個問題。但是這是唯一一個可能意味着我不得不重做一切的人。所以我需要在其他人面前解決這個問題。 – 2015-04-04 00:17:36

回答

4

我會做這與自定義容器控制器嵌入導航控制器(以獲得導航欄)。這個控制器將有兩個容器視圖,一個寬度爲屏幕寬度80%的左邊,右邊一個是全屏寬度;這些可以在故事板中設置。添加到容器控制器視圖中的滑動手勢識別器將允許您滑動菜單打開和關閉。下面的代碼是您在容器視圖控制器中打開和關閉菜單所需的全部內容。出口,leftCon,是左容器視圖的左邊緣和它的父之間的約束,

class ViewController: UIViewController { 

    @IBOutlet weak var leftCon: NSLayoutConstraint! 
    @IBOutlet weak var leftContainer: UIView! 


    @IBAction func closeMenu(sender: UISwipeGestureRecognizer) { 
     leftCon.constant = -leftContainer.frame.size.width 
     UIView.animateWithDuration(0.3){ 
      self.view.layoutIfNeeded() 
     } 
    } 

    @IBAction func openMenu(sender: UISwipeGestureRecognizer) { 
     leftCon.constant = 0 
     UIView.animateWithDuration(0.3){ 
      self.view.layoutIfNeeded() 
     } 
    } 

} 

我有一個示例應用程序(http://jmp.sh/5QwhYov),演示控制器的設置,但是沒有解決如何您可以根據菜單控制器中的選擇更改主控制器中的內容。有很多方法可以實施,我可以解決這個問題,如果你可以給我更多關於你想如何出現的細節。

+0

對不起,我忘了指定我不使用故事板。我一直試圖通過編程實現,但沒有任何成功。我現在設置的方式是使用2個不同的viewController,它有很多好處。但是,當然,如果現在可能,我將不得不在單個viewController中查看containerviews?我非常感謝你做出這個答案的時間,對不起,我沒有更詳細地說明我的工作方式。 – 2015-04-03 08:10:06

+0

以編程方式在容器的左側設置約束?使用它作爲你的leftCon – milo526 2015-04-03 13:15:13

+0

@ milo526,我不知道爲什麼你會在沒有故事板的情況下做到這一點,這當然是更簡單的方法,但可以使用自定義容器控制器API在代碼中完成。如果您對此不熟悉,請閱讀Apple的文檔「創建自定義容器視圖控制器」。 – rdelmar 2015-04-03 15:39:35