2017-09-04 60 views
0

我試圖加載主控制器中的所有控制器。嘗試使用主控制器作爲導航控制器。在主控制器部分加載uiviewcontroller

我嘗試模態賽格,但我只能加載第一個,因爲即使我可以看到主控制器上的導航我不能按下它。

我認爲頂級控制器必須調整爲禁忌,但我一直無法找到。我想要實現的是screenshot
控制器需要進入橙色部分。

+0

爲了更清楚地瞭解你的問題,你爲什麼不在navigaton控制器嵌入主視圖控制器?通過將它們推到導航堆棧上,可以輕鬆加載其他視圖控制器。 –

+0

這可能對您有所幫助:https://stackoverflow.com/a/11141688/8071224 –

回答

0

這是答案。找到一個老的教程,只做了一些調整。 也許可以幫助別人。

Picture

MenuCV

import UIKit 

class MenuCV: UIViewController { 
@IBOutlet weak var tableView: UITableView! 
var containerView: ContainerVC? 
var menuItems = [String]() 

override func viewDidLoad() { 
    super.viewDidLoad() 

    tableView.delegate = self 
    tableView.dataSource = self 

    menuItems = ["Dashboard", "Companies", "Makes"] 

} 

} 

extension MenuCV: UITableViewDataSource, UITableViewDelegate { 
func numberOfSections(in tableView: UITableView) -> Int { 
    return 1 
} 

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    return menuItems.count 
} 

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 

    guard let cell = tableView.dequeueReusableCell(withIdentifier: "menuCell") as? MenuTVC else { return UITableViewCell() } 

    let image = UIImage(named: "logo") 

    cell.configureCell(menuIcon: image!, menuLbl: menuItems[indexPath.row]) 

    return cell 
} 

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 

    containerView?.segueIdentifierReceivedFromParent(button: menuItems[indexPath.row]) 
} 

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
    if segue.identifier == "container" { 
     containerView = segue.destination as? ContainerVC 
    } 
} 

} 

ContainerVC

import UIKit 

class ContainerVC: UIViewController { 

var vc : UIViewController! 
var segueIdentifier : String! 
var lastViewController: UIViewController! 

override func viewDidLoad() { 
    super.viewDidLoad() 
    segueIdentifierReceivedFromParent(button: "Dashboard") 
} 

func segueIdentifierReceivedFromParent(button: String){ 

self.segueIdentifier = button 
    self.performSegue(withIdentifier: self.segueIdentifier, sender: nil) 

} 

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
    if segue.identifier == segueIdentifier{ 
     //Avoids creation of a stack of view controllers 
     if lastViewController != nil{ 
      lastViewController.view.removeFromSuperview() 
     } 
     //Adds View Controller to Container 
     vc = segue.destination 
     self.addChildViewController(vc) 
     vc.view.frame = CGRect(x: 0,y: 0, width: self.view.frame.width,height: self.view.frame.height) 
     self.view.addSubview(vc.view) 
     vc.didMove(toParentViewController: self) 
     lastViewController = vc 

    } 
} 

} 

DashboardVC

import UIKit 

class DashboardVC: UIViewController { 


override func viewDidLoad() { 
    super.viewDidLoad() 

} 

} 

CompaniesVC

import UIKit 

class CompaniesVC: UIViewController { 

override func viewDidLoad() { 
    super.viewDidLoad() 

} 

} 

MakesVC

import UIKit 

class MakesVC: UIViewController { 

override func viewDidLoad() { 
    super.viewDidLoad() 

} 

} 

EmptyVC

import UIKit 

class EmptyCV: UIStoryboardSegue { 

override func perform() { 

} 

} 
相關問題