programming learn framework development desarrollador app ios uinavigationcontroller uitabbarcontroller xcode6 uistoryboard

learn - swift ios documentation



Cómo implementar el controlador de la barra de pestañas con el controlador de navegación de manera correcta (3)

En Swift 2, Xcode 7 tiene una característica muy útil para agregar un UINavigationController:

  1. Seleccione el UIViewController que se está utilizando como una "pestaña" para UITabBarNavigationController
  2. En el menú superior de Xcode, selecciona "Editor" ->
  3. "Incrustar en" ->
  4. "Controlador de navegación"

Estoy usando Storyboard y Xcode 6. Tengo los siguientes controladores y escenas en mi Storyboard:

UINavigationController que tiene HomeViewController como raíz. HomeViewController tiene un botón que Show (eg Push) UITabBarController . UITabBarController tiene 4 UIViewControllers .

Pero mi problema es que después de mostrar UITabBarController no hay barras de navegación en 4 UIViewControllers . Pero supongo que si UITabBarController Show (eg Push) UITabBarController Show (eg Push) UITabBarController entonces debería tener un controlador de navegación integrado que sea el controlador inicial en el guión gráfico. ¿Estoy en lo cierto? Y si es así, ¿cómo puedo configurar la barra de navegación en Storyboard, porque ahora hay un evento de barra predeterminado en la barra de pestañas que veo en el guión gráfico. Seleccioné UIViewController y establecí las métricas simuladas en el inspector de identidad en la barra de navegación translúcida para la propiedad Superior, pero supuse que debería agregarse automáticamente a este controlador y a la barra de pestañas sin pasos adicionales.

¿O debería agregar un nuevo controlador de navegación para cada elemento de la barra de pestañas que tendrá sus controladores de vista raíz?

La principal pregunta es por qué no veo la barra de navegación en el guión gráfico mediante el programa (por ejemplo, pulsar). Por ejemplo, si agrego el controlador de navegación y luego configuro como controlador de barra de tabulación raíz, Xcode agrega automáticamente la barra de navegación superior, pero si la cola tiene un paso adicional como en mi caso HomeViewController, la barra de navegación superior nunca aparece automáticamente.


Hola, necesitas incrustar cada controlador de vista que está dentro de la barra de pestañas en un controlador de navegación propio. Entonces, el flujo es así (HomeVC está integrado en un NavController propio):

/ --> `NavController` --> `ViewController1` | --> `NavController` --> `ViewController2` `HomeViewController`-->`TabBarController`|--> `NavController` --> `ViewController3` /--> `NavController` --> `ViewController4`

  1. Vaya a Editor -> Insertar en -> Controlador de barra de pestañas (o Controlador de navegación)

Para responder tu pregunta:

Cada pestaña de una interfaz de controlador de barra de pestañas está asociada con un controlador de vista personalizado (diferente [sic]). Cuando el usuario selecciona una pestaña específica, el controlador de la barra de pestañas muestra la vista raíz del controlador de vista correspondiente, reemplazando las vistas anteriores.

Por lo tanto, el Controlador de Vista Root de la pestaña debe estar adjunto a un Controlador de Navegación; un controlador de vista de navegación debe ser el siguiente en línea para que el Controlador de Vista herede una Navegación. Una barra de pestañas cambia las vistas a lo que esté próximo en línea.

Este documento ayudará a delinear más información al respecto. https://developer.apple.com/documentation/uikit/uitabbarcontroller


Si quieres tener algo así:

TabBarController -> Navigation Controller -> View Controller with a Table View -> and from the TableView a MasterDetailView por ejemplo:

Tuve el problema de que no había navegación en el MasterDetailView (no había un botón Atrás para ViewController con The TableView).

La solución es:

Establezca Segue entre TableView y MasterDetailView para: Tipo: Push (obsoleto)

Ejecute su aplicación ... con suerte verá el botón Atrás ... cambie el Tipo a Show (eg Push) , vuelva a ejecutar -> debería funcionar.