UIViewController уведомления о содержании - PullRequest
0 голосов
/ 28 сентября 2018

У меня есть сомнения по поводу содержания UIViewController.Для простоты я сделал пример проекта и определил класс SecondViewController.

class SecondViewController: UIViewController {

override func viewDidLoad() {
    super.viewDidLoad()
    self.view.backgroundColor = UIColor.black
    NSLog("In second controller")

    // Do any additional setup after loading the view.
}

override func willTransition(to newCollection: UITraitCollection, with coordinator: UIViewControllerTransitionCoordinator) {
    NSLog("Transitioning in second controller")
  }
 }

И в первом контроллере я делаю следующее:

class ViewController: UIViewController {

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.

    let secondController = SecondViewController()
    addChild(secondController)
    view.addSubview(secondController.view)
    secondController.view.frame = self.view.bounds
    secondController.didMove(toParent: self)
}

override func willTransition(to newCollection: UITraitCollection, with coordinator: UIViewControllerTransitionCoordinator) {
    NSLog("Transitioning in first controller")
   }
 }

Когда я запускаю программу, она запускается ивот журналы:

2018-09-28 19:11:15.491211+0400 ViewContainment[3897:618645] In second controller
2018-09-28 19:11:17.254221+0400 ViewContainment[3897:618645] Transitioning in first controller

Вопросы:

  1. Означает ли это, что все уведомления UIViewController будут обрабатываться первым контроллером представления, и никакие уведомления не будут отправлятьсяконтроллер второго вида?

  2. Безопасно ли добавлять действия для нажатия кнопок в контроллере второго вида к селекторам в контроллере первого вида?

1 Ответ

0 голосов
/ 28 сентября 2018

Из документов Apple (https://developer.apple.com/documentation/uikit/uicontentcontainer/1621511-willtransition):

Если вы переопределяете этот метод в своих собственных объектах, всегда вызывайте super в какой-то момент вашей реализации, чтобы UIKit мог переслать признакизменения в связанном контроллере представления и любых дочерних контроллерах представления. Контроллеры представления пересылают сообщение об изменении признака своим дочерним контроллерам представления.

Поэтому убедитесь, что ваша функция в ViewController делает это:

override func willTransition(to newCollection: UITraitCollection, with coordinator: UIViewControllerTransitionCoordinator) {
    super.willTransition(to: newCollection, with: coordinator)
    NSLog("Transitioning in first controller")
}

Вопрос 2: Нет. Используйте шаблон протокола / делегата, чтобы позволить действиям в дочернем контроллере представления взаимодействовать с функциями / методами в родительском контроллере представления.

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