item custom bar iphone ios interface-builder uitableview uinavigationbar

iphone - custom - ¿Cómo agrego una barra de navegación a UITableViewController en Interface Builder?



navigation bar swift 4 (7)

El constructor de interfaces no me permite hacer clic y arrastrar una barra de navegación hacia un controlador de vista de tabla. Es súper frustrante.

Todo lo que quiero es una vista de tabla con un botón de edición (hecho en interfaz-constructor). Si esto no es posible, ¿cómo puedo agregar una barra de navegación de forma programática?

Gracias por adelantado.


¿Por qué en el mundo no se puede arrastrar un elemento de navegación en un archivo .xib con el propietario del archivo establecido en una subclase de UIViewController y enganchar el elemento de navegación en la salida del elemento de navegación de UIViewController está más allá de mí. Parece un verdadero agujero en la integración IB / XCode. Porque ciertamente puede arrastrar una instancia de ViewController a un archivo xib, y arrastrar un elemento de navegación en ViewController, y luego establecer el título y los elementos de botones de barras de esa manera.

Por lo tanto, si desea definir la barra de navegación del objeto de su subclase UITableViewController en IB, debe crear su objeto TableVC en un archivo xib (¡no el archivo .xib que contiene la tabla para su UITableViewController!). A continuación, engancha el objeto TableVC para que sea una salida de otro objeto (como el delegado de su aplicación), que funciona si solo necesita una instancia de su TVC durante toda la vida de su aplicación, o si desea crear dinámicamente instancias de su TableVC en el código que carga este archivo .xib adicional manualmente mediante loadNibNamed: owner: método de opciones de la clase NSBundle.


Desde iOS6 en adelante, puede usar la vista de contenedor. Entonces, lo que tienes que hacer es tomar el Controlador de Vista, agregarle la barra de navegación y luego agregar una Vista de Contenedor al mismo controlador de vista. Automáticamente, agregará el nuevo enlace del controlador de vista a su vista de contenedor. Ahora simplemente borre eso, y su controlador de vista de tabla en el tablero de historia. Ahora inserte el controlador de vista de tabla en la vista de contenedor con control de arrastre. Espero eso ayude.


Desde la vista de esquema, asegúrese de que su Controlador de vista de tabla esté seleccionado.

Luego vaya al menú Editor , y haga clic en el submenú Incrustar , y elija Controlador de navegación y listo. Tiene su controlador de navegación apuntando a su controlador de vista de tabla con una relación integrada.


Estos pasos me funcionaron en iOS 9:

  1. Agregue un controlador de vista al guión gráfico. Haga que UITableViewController sea una clase base.
  2. Agregue un objeto Barra de navegación en el controlador de vista en la parte superior.
  3. Agregue una vista de tabla debajo de la barra de navegación.
  4. Agregue una celda de vista de tabla a la vista de tabla.
  5. Agregar restricciones

Estoy de acuerdo en que es difícil averiguar cómo hacer cosas como esta en Interface Builder, pero afortunadamente es posible agregar una barra de navegación y un elemento de botón de barra a una vista de tabla de esta manera. He aquí cómo hacerlo:

  1. Arrastre una Vista en blanco (una instancia de UIView) desde la Biblioteca hasta el área cercana a la parte superior de la Vista de tabla. A medida que arrastre cerca del área objetivo, Interface Builder lo resaltará en azul para mostrarle dónde colocar la Vista. Suéltelo, y la vista se agregará como una subvista de la vista de encabezado de la vista de tabla.
  2. Arrastre una barra de navegación desde la biblioteca y suéltela en la vista en blanco que acaba de agregar.
  3. Arrastre un elemento de botón de barra de la biblioteca y suéltelo en la barra de navegación.

EDITAR

El problema con el enfoque anterior es que, como señala Bogatyr, la barra de navegación se desplazará junto con la vista de tabla. Apple recomienda usar una subclase personalizada de UIViewController que posea tanto la barra de navegación como una instancia de UITableView redimensionada para adaptarse. Desafortunadamente, eso significa que usted debe implementar el comportamiento UITableViewController necesita su subclase UIViewController usted mismo.

Otro enfoque que parece funcionar bien es crear una subclase personalizada de UIViewController que posea una vista de fondo en blanco que contenga la barra de navegación, así como una vista de contenido en blanco (una instancia de UIView ) que se ajuste a la barra de navegación. Su subclase personalizada tendría una salida apuntando a una instancia de UITableViewController en el mismo archivo de punta.

Esto tiene la ventaja de permitir que todos los componentes de la vista se creen y configuren en Interface Builder, y no requiere la implementación de métodos UITableViewController desde cero. El único detalle que debe tener en cuenta en el padre del Controlador de vista de tabla sería agregar Vista de tabla como una subvista de la vista de contenido del padre en viewDidLoad .

El padre podría implementar los métodos de acción para los elementos del botón de la barra de navegación e implementar el patrón de delegado si es necesario.


Primero agregue un controlador de navegación y coloque el controlador de vista de tabla (como controlador de vista raíz) en el controlador de navegación. Así es como se hace en Código porque no uso IB.


Para una vista de tabla con un botón de edición en la parte superior, use un UINavigationController, con una UITableView como vista raíz. Eso significa que creará una subclase UITableView personalizada para su vista de tabla y la usará como la vista raíz de su instancia de UINavigationController. (Programaticalmente, está configurado con UINavigationController''s -(id)initWithRootViewController . También se puede configurar mediante IB).

Luego, en su subclase UITableView, elimine el comentario de la siguiente línea:

- (void)viewDidLoad { [super viewDidLoad]; // Uncomment the following line to display an Edit button in the navigation bar for this view controller. self.navigationItem.rightBarButtonItem = self.editButtonItem; }

y voilà, la vista de su UINavigationController aparece como una vista de tabla con un botón de edición en el lado derecho de la barra de navegación.

Como el controlador está en la parte superior de la pila, no hay un botón "Atrás" a la izquierda, por lo que puedes usar self.navigationItem.leftBarButtonItem para cualquier UIBarButtonItem que crees.