viewController.view не добавляется в пользовательское представление внутри Parent View Controller - PullRequest
0 голосов
/ 27 апреля 2018

Я хотел бы добавить childViewController в пользовательскую часть 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 голосов
/ 27 апреля 2018

Вы можете проверить пример рабочего проекта, чтобы добавить подпредставления

Ссылка https://github.com/RockinGarg/Container_Views.git

Обязательный код:

Объект класса для добавления в качестве подпредставления

private lazy var FirstObject: firstVC =
  {
    // Instantiate View Controller
    let viewController = self.storyboard?.instantiateViewController(withIdentifier: "firstVC") as! firstVC

    // Add View Controller as Child View Controller
    self.addChildViewController(viewController)
    return viewController
  }()

Добавить в ParentView как подпредставление

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)
}

Где: -

firstContainer является родительским представлением, в которое необходимо добавить подпредставление

viewController объект класса, вид которого нужно добавить как Subview

Примечание- Это можно использовать как в контейнерах, так и в обычном UIView для добавления контроллера в качестве подпредставления

0 голосов
/ 27 апреля 2018

enter image description here Как насчет использования Контейнерного представления из библиотеки объектов (место, откуда мы перетаскиваем табличное представление, textView и все компоненты пользовательского интерфейса на нашу раскадровку). что

Контейнерное представление определяет контроллер области просмотра, который включает дочерний контроллер вида

  • Когда вы берете Вид контейнера из библиотеки объектов в нужном вам ViewController на storyBoard.
  • это автоматически дает вам другой контроллер представления, подключенный к вашему контроллеру представления с переходом.
  • вам просто нужно переопределить этот код segue, и этот перетаскиваемый контейнерный вид будет работать как контроллер дочернего представления, для которого он загрузился, будет вызываться автоматически.

просто переопределить это ваш родительский вид контроллера

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!

, чтобы однозначно идентифицировать отношения между ребенком и родителем. и отдых ваша работа будет выполнена автоматически.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...