viewController.view未添加到父视图控制器内的自定义视图中

时间:2018-04-27 00:06:27

标签: ios swift uiview uiviewcontroller

我想将childViewController添加到parentViewController的自定义UIView部分。但是,如果我正在self.customView.addSubview(childViewController.view),我看不到childViewController.view,因为它没有被添加。相比之下,如果我做self.view.addSubview(childViewController.view)这一切都运作良好。有人可以解释为什么会这样吗?我真的需要将childViewController.view添加为customView的子视图,而不是self.view的一部分。

if let childViewController = self.storyboard?.instantiateViewController(withIdentifier: "ChildVC") as UIViewController? {
            self.addChildViewController(childViewController)
            childViewController.view.frame = customView.bounds
            self.customView.addSubview(childViewController.view)
            childViewController.view.autoresizingMask = [.flexibleWidth, .flexibleHeight]
            childViewController.didMove(toParentViewController: self)
            childViewController.view.frame = CGRect(x: customView.frame.origin.x,
                                         y: customView.frame.origin.y,
                                         width: customView.frame.width,
                                         height: customView.frame.height)

        }

2 个答案:

答案 0 :(得分:1)

enter image description here如何使用Object Library中的容器视图(将表视图,textView和所有UI组件拖到我们的故事板上的位置)。

  

容器视图定义包含的视图控制器区域   子视图控制器

  • 当您从所需的对象库中获取容器视图时 关于storyBoard的ViewController。
  • 它会自动为您提供另一个视图控制器,它附带一个segue。
  • 你只需要覆盖这个segue代码,并且拖动的容器视图将作为子视图控制器工作,它会自动调用load。

只是覆盖这是您的父视图控制器

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if let identifier = segue.identifier {
      switch identifier {
      case "SegueIndetifierName":
        (segue.destination as? YourChildViewController)?.parentViewControllerObject = self
      default:
        break
      }
    }
  }

注意:在您的子视图控制器中声明parentView控制器对象,如下所示

weak var parentViewControllerObject: ParentViewController!

唯一标识子和父之间的关系。并且你的工作将自动完成。

答案 1 :(得分:1)

您可以查看示例工作项目以添加子视图

链接https://github.com/RockinGarg/Container_Views.git

必填代码:

要添加为子视图的类对象

private func add(asChildViewController viewController: UIViewController)
{
    // Configure Child View
    viewController.view.frame = CGRect(x: 0, y: 0, width: self.firstContainer.frame.size.width, height: self.firstContainer.frame.size.height)

    // Add Child View Controller
    addChildViewController(viewController)
    viewController.view.translatesAutoresizingMaskIntoConstraints = true

    // Add Child View as Subview
    firstContainer.addSubview(viewController.view)

    // Notify Child View Controller
    viewController.didMove(toParentViewController: self)
}

将ParentView添加为子视图

firstContainer

其中: -

viewController是父视图,其中要添加子视图

this.storeList.next(m);类对象,其视图将添加为Subview

注意 - 这可以在containerViews和Normal UIView中使用,以便将Controller添加为子视图