container ios swift uicontainerview

ios - use container view swift 4



¿Cómo obtengo las vistas dentro de un contenedor en Swift? (2)

Tengo una Vista de contenedor que apareció en mi guión gráfico. Hay una pequeña flecha maravillosa que representa la transición de inserción a otra escena. El objeto de primer nivel de esa escena está controlado por un UIViewController personalizado. Quiero llamar a un método que está implementado en mi clase personalizada. Si tengo acceso al contenedor, ¿cómo obtengo una referencia a lo que hay adentro?


La respuesta de ABaker ofrece una excelente manera para que los padres aprendan sobre el niño. Para que el código en el niño llegue al padre, use self.parent (o en ObjC, parentViewController ).


Puede usar prepareForSegue , un método en UIViewController , para obtener acceso a cualquier UIViewController esté segmentando desde su controlador de vista actual, esto incluye embed .

De la documentación sobre prepareForSegue :

La implementación predeterminada de este método no hace nada. Su controlador de vista anula este método cuando necesita pasar datos relevantes al nuevo controlador de vista. El objeto segue describe la transición e incluye referencias a ambos controladores de vista implicados en el segue.

En su pregunta mencionó que necesita llamar a un método en su controlador de vista personalizado. Aquí hay un ejemplo de cómo podrías hacer eso:

1. Dé a su inserción un identificador. Puede hacer esto en el Creador de Interfaces seleccionando su transición, yendo al Editor de Atributos y buscando en Storyboard Embed Segue .

2. Crea tus clases algo así como:

Se mantiene una referencia en embeddedViewController para que myMethod pueda ser llamado más tarde. Se declaró como una opción opcional implícitamente desempaquetada porque no tiene sentido darle un valor inicial no nulo.

// 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. Establezca las clases de sus UIViewControllers en IB utilizando el Inspector de identidad . Por ejemplo:

Y ahora todo debería funcionar. ¡Espero que ayude!