Ответ 1
Вы можете использовать prepareForSegue
, метод в UIViewController
, чтобы получить доступ к любому UIViewController
, отделяемому от вашего текущего контроллера представления, включая embed
segues.
Из документации о prepareForSegue
:
По умолчанию реализация этого метода ничего не делает. Контроллер вашего представления переопределяет этот метод, когда ему необходимо передать соответствующие данные новому контроллеру. Объект segue описывает переход и включает ссылки на оба диспетчера представлений, участвующих в сегменте.
В вашем вопросе, о котором вы говорили, нужно вызвать метод на вашем настраиваемом контроллере. Вот пример того, как вы могли это сделать:
1. Дайте вашему встроенному идентификатору идентификатор. Вы можете сделать это в построителе интерфейса, выбрав свой segue, перейдя в редактор атрибутов и посмотрев под Storyboard Embed Segue.
2. Создайте свои классы примерно так:
Ссылка сохраняется на embeddedViewController
, поэтому myMethod
можно вызвать позже. Он объявлен как неявно развернутый необязательный, потому что не имеет смысла указывать ему начальное значение, отличное от нуля.
// This is your custom view controller contained in `MainViewController`.
class CustomViewController: UIViewController {
func myMethod() {}
}
class MainViewController: UIViewController {
private var embeddedViewController: CustomViewController!
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if let vc = segue.destination as? CustomViewController,
segue.identifier == "EmbedSegue" {
self.embeddedViewController = vc
}
}
// Now in other methods you can reference `embeddedViewController`.
// For example:
override func viewDidAppear(animated: Bool) {
self.embeddedViewController.myMethod()
}
}
3. Задайте классы вашего UIViewControllers
в IB, используя Identity Inspector. Например:
И теперь все должно работать. Надеюсь, что это поможет!