【问题标题】:Pass Multiple ViewControllers through One Container View - Xcode 8, Swift 3通过一个容器视图传递多个视图控制器 - Xcode 8、Swift 3
【发布时间】:2017-03-12 00:19:12
【问题描述】:

我只是想在按下按钮时通过容器视图传递一个视图控制器。我的导航也在一个容器视图中并且水平滚动(像一个停靠点) 这里有两张图片来说明我正在尝试做的事情。

ContainerView 可以做到这一点吗?

【问题讨论】:

    标签: ios swift user-interface swift3 xcode8


    【解决方案1】:

    想通了!! 我删除了蓝色的容器视图并将其换成滚动视图 这是其他对此感兴趣的人的代码。仍在努力使 toe Container 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)
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-16
      • 1970-01-01
      • 2023-04-07
      • 2015-10-13
      • 2013-06-13
      • 1970-01-01
      相关资源
      最近更新 更多