Cómo subclamar correctamente UITableViewController

Tengo un UITableViewController en el que UITableViewController algunas properties de celda específicas en el método cellForRowAtIndexPath . El único método en el que cellForRowAtIndexPath algo específico fue el método cellForRowAtIndexPath . No incluyé ningún otro método. (por lo que esencialmente el UITableViewController está vacío aparte de cellForRowAtIndexPath)

Ahora, estoy intentando subclass basado en este UITableViewController, pero mi pregunta es ¿cómo configuro cellForRowAtIndexPath para la subcadena? Si lo dejo en blanco, la aplicación se bloquea porque espera que se defina una celda. Sin embargo, ¿no debería usar la celda definida en la class base?

¿Qué es exactamente lo que tengo que poner en el método 'cellForRowAtIndexPath' de mi subclass para usar la configuration de celda que creé en mi class base?

editar Me han dicho la solución, y para cualquiera que se pregunte, llame a la class del super dentro de su subclass con algo como

 UITableViewCell *cell = (UITableViewCell *)[super tableView:tableView cellForRowAtIndexPath:indexPath]; return cell; 

esto devuelve la celda del súper a su sublizador, y luego devuelve esa celda.

si entendí correctamente, tienes una UITableViewCell personalizada que deseas usar en tu implementación de tableview:cellFowRowAtIndexPath:

registerClass:forCellReuseIdentifier: llamar a registerClass:forCellReuseIdentifier: junto con su class personalizada Y el identificador de reutilización definido en tableview:cellFowRowAtIndexPath: para que devuelva una instancia de esta class.

Por ejemplo:

 - (void)viewDidLoad { [super viewDidLoad]; [self.tableView registerClass:[CustomTableViewCell class] forCellReuseIdentifier:@"CustomCell"]; } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *CellIdentifier = @"CustomCell"; CustomTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath]; // Configure the cell... return cell; } 

No olvides llamar a #import "CustomTableViewCell.h"

Estás confundiendo inheritance y delegación. Tenga en count que una UITableView necesita una class para ser UITableViewDelegate y UITableViewDataSource . Esta class no necesita henetworkingar de UITableView . Creo que tendrás una mejor oportunidad de lo que intentas hacer subclassando un UITableViewCell

Este método es una parte necesaria del protocolo de origen de datos de vista de tabla, que debe especificar. Si observa la documentation del desarrollador para UITableViewController, verá que cellForRowAtIndexPAth no es una function de ella; Está bajo la UITableViewDataSource que puede encontrar aquí . Esto significa que no hay implementación en la class base; las funciones son abstractas en el protocolo y se supone que debes extenderlas e implementarlas.

En su lugar, puede devolver las celdas vacías si planea crear una tabla vacía. Simplemente asignalos y devuélvalos en la function; no se requiere subclasificar las celdas de vista de tabla. Una vez que su aplicación deja de bloquearse, puede especificar el text que necesita. Use indexPath para hacer que las celdas de diferentes secciones o diferentes filas especifiquen text diferente.

Creo que encontrará que su UITableViewController, que contiene cellForRowAtIndexPath, ya es una subclass de UITableViewController. Su encabezado se verá así:

 #import <UIKit/UIKit.h> @interface MyTableViewController : UITableViewController @end 

Lo que distingue a UITableViewController es

  • Tiene una propiedad self.tableView que contiene una reference a tableView.
  • agrega dos properties adicionales y un método a la superclass habitual UIViewController, pero lo más importante …
  • (normalmente) actúa como el delegado y fuente de datos para la tablaView

Esto último significa que tiene que implementar al less dos methods de fuente de datos. Como methods de delegado, estos no se implementan en la superclass UITableViewController, por lo que ambos deben includese:

 - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { #warning Incomplete method implementation. // Return the number of rows in the section. return 0; } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *CellIdentifier = @"Cell"; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath]; // Configure the cell... return cell; } 

Has implementado cellForRowAtIndexPath , pero también necesitas implementar numberOfRowsInSection: para que la tabla sepa qué tan grande debe ser.