2012-05-10 10 views
15

cómo usaría UINibs para crear instancias y usar una UITableViewCell para una tabla vista en iOS5.0. Yo sé que hay una registerNib: forCellReuseIdentifier: en iOS5.0 que también tiene que ser utilizado, pero no estoy seguro de cómo usarloCómo usar UINib para crear instancias y usar UITableViewCells personalizadas

Gracias de antemano por cualquier ayuda en este

+1

Salida este enlace: http://useyourloaf.com/blog/2011/2/28/speeding-up-table-view-cell-loading -with-uinib.html ¡Eso debería hacerte comenzar! :) –

Respuesta

41
  1. Cree el archivo de xib con una UITableViewCell como el objeto de nivel superior. Esto se llama Cell.xib
  2. Cree un objeto UINib basado en este archivo
  3. Registre el UINib con la vista de tabla (normalmente en viewDidLoad de su subclase de controlador de vista de tabla).

los pasos 2 y 3 se pueden combinar, por lo que utilizaría la siguiente línea en viewDidLoad:

[self.tableView registerNib:[UINib nibWithNibName:@"Cell" bundle:nil] forCellReuseIdentifier:@"Cell"]; 

Luego, en cellForRowAtIndexPath, si quieres una de las celdas de la punta, que quitar de la cola se :

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell"]; 

Esto crea una nueva instancia desde el plumín o quita una de las células existentes.

+2

¡De hecho acabo de implementar el identificador de reutilización de células y funciona bastante bien! –

+1

Su solución es absolutamente correcta, pero lamentablemente hay un error en iOS 5 (corregido en iOS 6) junto con VoiceOver: http://openradar.appspot.com/11549999 –

+0

Al cargar la celda, quiero personalizar el color de fondo mediante programación (porque el color bg es una imagen de patrón). ¿Es posible? – Satyam

1

@jrturtons respuesta es correcta, pero desafortunadamente hay un error en iOS 5 (solucionado en iOS 6) junto con VoiceOver: rdar://11549999. La siguiente categoría en UITableView soluciona el problema. Solo use -fixedDequeueReusableCellWithIdentifier: en lugar del dequeueReusableCellWithIdentifier: normal. Por supuesto, el BNI debe registrarse usando

[self.tableView registerNib:[UINib nibWithNibName:@"Cell" bundle:nil] forCellReuseIdentifier:@"Cell"]; 

antes (en -viewDidLoad).

UITableView + Workaround.m:

@implementation UITableView (Workaround) 
- (id)fixedDequeueReusableCellWithIdentifier:(NSString *)identifier { 
    id cell = [self dequeueReusableCellWithIdentifier:identifier]; 
    if (!cell) { 
     // fix for rdar://11549999 (registerNib… fails on iOS 5 if VoiceOver is enabled) 
     cell = [[[NSBundle mainBundle] loadNibNamed:identifier owner:self options:nil] objectAtIndex:0]; 
    } 
    return cell; 
} 
@end 
+0

He leído sobre este error varias veces, pero nunca lo he experimentado, incluso en iOS 5.0 cuando ejecuto VoiceOver. Creo que el problema real es mucho más complicado que esto. –

+0

Dicho esto, sospecho que su solución siempre funciona: ¡Genial! :) –

Cuestiones relacionadas