Настройка делегатов в представлении контейнера - PullRequest
0 голосов
/ 12 ноября 2018

У меня в Storyboard есть контейнерное представление, которое отображает другой контроллер представления, который я уже запрограммировал, и прочее Я хочу установить связь между основным контроллером представления и контроллером автономного представления. Я знаю, как использовать делегаты, и мне удобно их использовать, однако я обычно настраиваю делегатов, когда инициализирую ViewController, однако в этом случае я не знаю, где это применить, так как контроллер представления уже существует для раскадровки. , Обычно я бы сделал что-то вроде этого:

class HomeVC: UIViewController {
    func initializeVC() {
        resultsVC = self.storyboard?.instantiateViewController(withIdentifier: "resultsView") as! GoalsVC
        resultsVC.calcDelegate = self //I set the "HomeVC" as the Delegate since it has all the functions I need
    }
}

Как упомянуто выше, поскольку я никогда не создавал этот контроллер представления с помощью кода, я не знаю, как назначить делегата (в особенности, устанавливая делегата в "self" (где Self - основной контроллер представления)

Ответы [ 2 ]

0 голосов
/ 12 ноября 2018

Вы можете назначить делегата в prepareforsegue. Как ниже код

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if (segue.identifier == "container_segue") {
        let controller = segue.destination as! containerController
        controller.delegate = self
    }
}

Когда проект запускается, этот метод вызывается автоматически, потому что мы создали segue в раскадровке.

Используя segue.identifier, вы можете проверить, для какого контроллера произойдет переход, и, соответственно, вы можете выполнить ваши требования.

0 голосов
/ 12 ноября 2018

Поскольку вы используете раскадровку для просмотра контейнера. Существует тип segue с типом embed. Дайте это segue a identifier, скажем MyContainedViewControllerSegueId

Затем в prepare(for segue:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if segue.identifier == "MyContainedViewControllerSegueId" {
            // here you get your contained view controller as `segue.destination`
            // cast it your subclassed view controller
            // use delegate on that subclassed view controller for communication purpose.
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...