我只是想在按下按钮时通过容器容器传递一个Viewcontroller。我的导航也在容器 View 中,并且水平滚动(如停靠栏)
这里有2张图片来说明我正在尝试做的事情。
ios - 通过一个容器 View 传递多个ViewController-Xcode 8,Swift 3-LMLPHP

ios - 通过一个容器 View 传递多个ViewController-Xcode 8,Swift 3-LMLPHP

ContainerView有可能吗?

最佳答案

弄清楚了!!
我删除了蓝色的“容器 View ”并将其替换为“滚动 View ”
这是对任何对此感兴趣的其他人的代码。仍在努力使“容器 View ”的高度相对于内容动态变化。

本教程有很大帮​​助:Tutorial

主 View Controller :

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

    }
}

容器 View (紫色 View )
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)
        }
    }
}

10-04 12:46
查看更多