En mi aplicación, estoy usando un controlador de navegación. Más adelante, en alguna vista, estoy usando presentViewController
para mostrar una imagen ampliada. Además, no estoy usando un Storyboard o plumín.
Recibo este error solo en iOS 7. Funciona bien en iOS 6 y versiones anteriores:
Se desaconseja presentar controladores de vista en controladores de vista separados
Respuestas:
Para evitar recibir la advertencia en una navegación push, puede usar directamente:
Y luego, en su controlador de vista modal, cuando todo haya terminado, puede llamar:
[self dismissViewControllerAnimated:YES completion:nil];
fuente
self.navigationController
hizo por mí.La razón de esta advertencia es que estaba presentando un controlador de vista sobre una vista pequeña que no es de tamaño completo. A continuación se muestra la imagen de mi proyecto. donde haga clic en cuatro opciones anteriores. El usuario navega a diferentes vistas de childviewcontroller (funciona como tabViewcontroller). Pero el childviewcontroller contiene una vista de tamaño pequeño. Entonces, si presentamos una vista desde childviewcontroller, aparece esta advertencia.
Y para evitar esto, puede presentar una vista sobre el padre del controlador childview
fuente
Esperar
viewDidAppear()
:Este error también puede surgir si está intentando presentar el controlador de vista antes de que la vista realmente apareciera, por ejemplo, presentar la vista en
viewWillAppear()
o antes. Intenta presentar otra vista despuésviewDidAppear()
o dentro de ella.fuente
viewDidLoad()
, gente! He cometido este error muchas veces ...En mi caso,
sampleViewController
agregué una vista como una subvista, luego trato de presentar un popover desde la vista desampleViewController
(aquí, enself
cambio, unaUIViewController
instancia):La forma correcta debería estar a continuación:
Por cierto, esto también funciona para el caso de que presente un popover desde una celda de vista de tabla, solo necesita asegurarse de que el controlador de vista de tabla también se haya agregado como controlador de vista secundario.
fuente
[self addChildViewController:sampleViewController];
agregué, ahora agregué esto, graciasCreo que el problema es que no tiene una jerarquía de controlador de vista adecuada. Configure el controlador rootview de la aplicación y luego muestre nuevas vistas presionando o presentando nuevos controladores de vista en ellas. Deje que cada controlador de vista administre sus vistas. Solo los controladores de vista de contenedor, como el control de barra de pestañas, deberían agregar vistas de otros controladores de vista a sus propias vistas. Lea la guía de programación de los controladores de vista para obtener más información sobre cómo usar los controladores de vista correctamente. https://developer.apple.com/library/content/featuredarticles/ViewControllerPGforiPhoneOS/
fuente
Swift 3
Para cualquiera que se encuentre con esto, aquí está la respuesta rápida.
fuente
Tengo casi el mismo problema. La razón fue que intenté presentar "algunos" controladores en otro y después de que se completó la animación, configuré el controlador presentado como root. Después de esta operación, todos los controladores adicionales que se presentan me llevan a la advertencia: " Se desaconseja presentar controladores de vista en controladores de vista separados ". Y resuelvo esta advertencia simplemente configurando "algunos" controladores como root sin ninguna presentación al comienzo.
Remoto:
Simplemente haga como root sin ninguna presentación:
fuente
Una de las soluciones a esto es si tiene childviewcontroller Entonces simplemente presenta viewviewcontroller en su padre por
Y para descartar utiliza el mismo controlador de despido.
Esta es la solución perfecta para mí.
fuente
Usar
[self.navigationController presentViewController:xxx animated:YES completion:nil]
en iOS 8.fuente
Prueba este código
fuente
Intente presentar
TabBarController
si es unaTabBarController
aplicación basada.La razón podría ser
self
hija deTabBarController
y está tratando de presentar desdeChildViewController
.fuente
Sí, también me enfrenté al mismo mensaje de advertencia mientras mostraba un controlador de alerta que estaba en otra vista. Más tarde evité esto presentando el controlador de alertas desde el controlador de vista principal como se muestra a continuación:
fuente
debe agregar el controlador de vista que presentará el nuevo controlador como hijo del controlador de vista principal.
Digamos que tiene su MainViewController, luego agrega un nuevo controlador llamado controllerA, y luego desea presentar un nuevo controlador llamado controllerB desde el controladorA
tienes que escribir algo como esto:
y dentro del controlador A puede presentar el nuevo controlador sin advertencias
fuente
En Swift 4.1 y Xcode 9.4.1
La solucion es
Si escribo así, obtengo el mismo error
Me sale el mismo error
La solución completa es
fuente
Para comenzar, asegúrese de tener un controlador de vista raíz. Puedes configurarlo
didFinishLaunchingWithOptions
.fuente
Muchas razones para esta advertencia. El mío es porque tengo un segmento conectado de un ViewController a otro que se presentará modalmente. Pero, el ViewController desde el que presento está siendo generado dinámicamente por un PageViewController. Es por eso que está separado en el Storyboard. Mi aplicación no se bloqueará por eso; pero me gustaría silenciar la advertencia.
fuente
Llegué a este hilo donde tengo una barra de navegación personalizada y estaba llamando a un AlertViewController a través de él.
Tuve que agregarlo de niño a mi controlador de vista principal. Entonces podría llamar a presentarlo sin previo aviso.
Deberías agregar tu
Zoomed Image View Controller
como hijo del ViewController principal.(p.ej)
Entonces podrá llamar a su ZoomedImageViewController
fuente
Muchas respuestas son correctas.
Este problema me ocurrió cuando mi compañero de trabajo agregó un AViewController a BViewController. De alguna manera, simplemente agrega la vista de AViewController a la vista de BViewController.
Solucionado por add bViewController.addChild (aViewController)
fuente
Depende si desea mostrar su alerta o algo similar en cualquier tipo de UIViewController.
Puede usar este ejemplo de código:
fuente
Attempt to present <UIAlertController: 0x7fc01a1eb600> on <ViewController: 0x7fc019821e00> whose view is not in the window hierarchy!