通过一个容器视图传递多个ViewControllers - Xcode 8,Swift 3

时间:2017-03-12 00:19:13

标签: ios user-interface swift3 xcode8

我只想在按下按钮时通过Container View传递Viewcontroller。我的导航也在容器视图中并水平滚动(如底座) 这里有2张图片来说明我想要做的事情。 enter image description here

enter image description here

这是否可以使用ContainerView ???

1 个答案:

答案 0 :(得分:3)

想出来!! 我删除了蓝色的Container View并将其换成了Scroll View 对于对此感兴趣的任何其他人,此处都是“准则”。仍然致力于使容器视图的高度动态化为内容。

本教程帮助很多:Tutorial

主视图控制器:

var container: ContainerViewController!

override func viewDidLoad() {
    container!.segueIdentifierReceivedFromParent("first")

}


@IBAction func firstBtnPressed(_ sender: Any) {
    let vc = "first"
     container!.segueIdentifierReceivedFromParent(vc)

}

@IBAction func secondBtnPressed(_ sender: Any) {
    container!.segueIdentifierReceivedFromParent("second")
}


@IBAction func thirdBtnPressed(_ sender: Any) {
    container!.segueIdentifierReceivedFromParent("third")
}





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

        container = segue.destination as! ContainerViewController


    }
}

容器视图(紫色视图)

open class ContainerViewController: UIViewController {
//Manipulating container views
fileprivate weak var viewController : UIViewController!
//Keeping track of containerViews
fileprivate var containerViewObjects = Dictionary<String,UIViewController>()

/** Specifies which ever container view is on the front */
open var currentViewController : UIViewController{
    get {
        return self.viewController

    }
}


fileprivate var segueIdentifier : String!

/*Identifier For First Container SubView*/
@IBInspectable internal var firstLinkedSubView : String!


override open func viewDidLoad() {
    super.viewDidLoad()



}
open override func viewDidAppear(_ animated: Bool) {
    if let identifier = firstLinkedSubView{
        segueIdentifierReceivedFromParent(identifier)
    }
}
override open func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

func segueIdentifierReceivedFromParent(_ identifier: String){



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



}




override open func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == segueIdentifier{


        //Remove Container View
        if viewController != nil{


            viewController.view.removeFromSuperview()
            viewController = nil



        }
        //Add to dictionary if isn't already there
        if ((self.containerViewObjects[self.segueIdentifier] == nil)){
            viewController = segue.destination
            self.containerViewObjects[self.segueIdentifier] = viewController

        }else{
            for (key, value) in self.containerViewObjects{

                if key == self.segueIdentifier{

                    viewController = value


                }

            }


        }

        self.addChildViewController(viewController)
        viewController.view.frame = CGRect(x: 0,y: 0, width: self.view.frame.width,height: self.view.frame.height)
        self.view.addSubview(viewController.view)
        viewController.didMove(toParentViewController: self)


    }

}

}