2009-10-23 11 views
7

Tengo problemas para crear un UIView (en el Creador de interfaces) que contiene una UITableView con algún otro objeto, como UIButton o UILabel. UITableView siempre ocupa la máxima cantidad de espacio en UIView, independientemente del tamaño del objeto UITableView. El propietario del archivo es un UITableViewController estándar.UITableView utiliza todo el espacio disponible en el Generador de interfaces

+1

¿Podría cambiarle el nombre a algo así como: "UITableView usa todo el espacio disponible en Interface Builder"? El título actual no es muy descriptivo. – Casebash

Respuesta

12

Aquí se explica cómo hacerlo fácilmente:

1) Cree un controlador de vista de tabla con xib.

2) Cambie el tipo heredado en el archivo .h de UITableViewController, a UIViewController.

3) Agregue los protocolos UITableViewDataSource, UITableViewDelegate al archivo .h.

4) Abra el xib, agregue una vista.

5) arrastre la vista de tabla en el xib en la vista, cambie el tamaño como desee.

6) Conecte la propiedad "ver" del propietario del archivo a la vista en lugar de la UITableView. Las fuentes de datos y las propiedades de delegado de la vista de tabla aún deben estar conectadas al propietario del archivo.

7) (opcional) si desea poder volver a cargar o acceder a la tabla fuera de Table View Controller delegue métodos que pasan en una vista de tabla, haga que una UITableView * IBOutlet se llame "myTable" o similar, y conecte la mesa en IB a eso.


Un enfoque alternativo es hacer una nueva UIViewController con xib, añadir una tabla a la xib, fuente de datos de alambre/delegado al propietario del archivo, y hacer una nueva clase UITableViewController que se utiliza para copiar los métodos de en su controlador de vista, luego eliminar.

+1

Esta es la forma correcta de hacerlo.De los documentos de Apple: "Si la vista a gestionar es una vista compuesta en la que una vista de tabla es una de múltiples subvistas, debe usar una subclase personalizada de UIViewController para administrar la vista de tabla (y otras vistas). No use un UITableViewController objeto porque esta clase de controlador mide la vista de tabla para llenar la pantalla entre la barra de navegación y la barra de pestañas (si están presentes) ". – bpapa

+0

También hay un paso que creo que debes agregar Kendall: tendrá que agregar explícitamente el tableView como propiedad de su clase UIViewController y convertirlo en un IBOutlet. – bpapa

+0

Kendall/bpapa - Gracias por su ayuda. Usando sus respuestas combinadas, pude abordar mi problema. Una cosa sobre el último comentario de bpapa: tuve que crear una propiedad llamada "tableView" en mi clase UIViewController; sin embargo, parecía funcionar incluso si no lo declaraba como un IBOutlet o conectaba el IBOutlet con el propio TableView. Todavía no entiendo por qué funciona ... :-) –

0

Desafortunadamente, crear una UITableView en Interface Builder (IB) fue muy problemático para mí. Me encontré con los mismos problemas que usted como desarrollador principiante y, después de mucha frustración, terminé abandonando IB para UITableViews.

La mejor solución para mí fue simplemente implementar el UITableViewController (y el UINavigationController que usa como encabezado) programáticamente. Una vez que descubra todo el paradigma Model-View-Controller, en realidad es bastante sencillo.

Algunos buenos recursos para tratar con ellos mediante programación se pueden encontrar en la documentación de Apple con estos nombres:

"Tabla Guía de programación para iPhone OS"
"View Controller Guía de programación para iPhone OS"

+1

Mire la respuesta de Kendall y mi comentario. Desde 3.0, Apple limpió los documentos para explicarlo mejor. Con este enfoque, aún puede hacer vistas de tabla en el generador de interfaz. – bpapa

+0

Es bueno saberlo, gracias. –

Cuestiones relacionadas