2009-07-02 18 views
31

He insertado un UITableViewController y su correspondiente UITableView en un simple documento de IB. El objetivo es incluir el UITableView dentro de una UIWindow padre (o UIView) con otras "cosas" (cualquier cosa realmente) que adornan la tabla. Esto es lo que podría parecer en Interface Builder.¿Se puede agregar TableView de UITableViewController a otra vista?

enter image description here

He intentado en numerosas ocasiones y siempre llegar a un mismo lugar.

  1. Construir una subclase de trabajo de UITableViewController lleno de datos
  2. personalizar el UTableView y es células incluyendo objetivos grifo
  3. Añadir la UITableViewController recién creado en un documento del IB
  4. Arrastre el UITableView fuera de la UITableViewController y en el UIView principal
  5. Cablee el UITableViewController al UITableView
  6. Nota: agregar el UITableViewController en el código da como resultado el mismo pro blem

Al ejecutar la aplicación en el emulador de iPhone o en un dispositivo, la tabla se muestra correctamente, pero se bloquea la primera vez que intenta interactuar con ella. Un desplazamiento, un toque, cualquier cosa bloquea la aplicación. Esto parece ser un problema de delegado, como el UITableView no sabe cómo comunicarse de nuevo con UITableViewController, pero no tengo idea de cómo corregir el problema.

Hasta ahora he podido pasar personalizando tableHeaderView para obtener diseños que sean suficientes, pero preferiría que la otra técnica funcione.

Respuesta

32

¡Está en el camino correcto! Esto es lo que tiene que hacer:

  1. Crear una subclase UIViewController estándar con su vista que acompaña xib.

  2. Agregue un UITableView en el XIB.

  3. Conecta todo. El controlador de vista será el delegado y el origen de datos para su tabla, por lo que debe implementar ambos protocolos.

  4. En el archivo de aplicación, añadir todos los métodos de origen de datos y delegar necesarios para la tableview:

    (UITableViewCell *)tableView:(UITableView *)tv 
        cellForRowAtIndexPath:(NSIndexPath *)indexPath 
    

Su archivo de cabecera puede ser algo como esto:

MyViewController.h

@interface MyViewController : UIViewController <UITableViewDataSource, UITableViewDelegate> 
{ 
    IBOutlet UITableView *myTableView; 
    //This outlet is only necessary if you need to send messages to the table view (such as reloadData) 
} 
@end 

Eso debería hacerlo!

+0

¡Funcionó como un amuleto, gracias! –

Cuestiones relacionadas