Hacer un propietario falso funcionará; sin embargo, tal solución puede ser frágil e inextensible. En cierto sentido, la célula se posee a sí misma, pero incluso eso es técnicamente incorrecto. La verdad es que UITableViewCell
s no tienen dueños.
La forma correcta de implementar celdas de vista de tabla personalizadas es crear primero una subclase personalizada de UITableViewCell.En esta clase, definirá todos los IBOutlets y demás para la celda. Este es un ejemplo de un archivo de cabecera:
@interface RBPersonCell : UITableViewCell
@property (nonatomic, strong) IBOutlet UILabel * nameLabel;
@property (nonatomic, strong) IBOutlet UILabel * ageLabel;
- (void)setupWithPerson:(Person *)person;
@end
A partir de ahí, tengo un método de conveniencia que crea la célula a partir de la punta, si es necesario:
+ (id)cellForTableView:(UITableView *)tableView reuseIdentifier:(NSString *)reuseID fromNib:(UINib *)nib {
if (!reuseID)
reuseID = [self cellIdentifier];
id cell = [tableView dequeueReusableCellWithIdentifier:reuseID];
if (!cell) {
NSArray * nibObjects = [nib instantiateWithOwner:nil options:nil];
// Sanity check.
NSAssert2(([nibObjects count] > 0) &&
[[nibObjects objectAtIndex:0] isKindOfClass:[self class]],
@"Nib '%@' does not appear to contain a valid %@",
[self nibName], NSStringFromClass([self class]));
cell = [nibObjects objectAtIndex:0];
}
return cell;
}
Este método encapsula todo el código de creación así que nunca tengo que verlo ni reescribirlo. Supone que la celda personalizada es la primera vista de raíz en el plumín. Esta es una suposición bastante segura ya que solo debe tener la celda personalizada como una vista de raíz.
Con todo este código en su lugar, ya está listo para trabajar en Interface Builder. Primero necesita establecer la clase personalizada en la inspección de identidad. A continuación, no olvide configurar su identificador de celda. Para su comodidad, es mejor utilizar el nombre de la clase personalizada. Cuando arrastre sus conexiones, en lugar de arrastrarlas al propietario del archivo, arrastre sus conexiones a la celda personalizada.
La mayor parte de lo que he aprendido sobre las células de la vista de tabla personalizada proviene de iOS Recipes recetas 15-16. Aquí hay un free extract directamente desde The Pragmatic Bookshelf. Puede consultar ese libro para más detalles.
EDIT:
finalmente llegué a abrir abastecimiento mi clase RBSmartTableViewCell
. Puedes encontrarlo en mi GitHub. Debería encontrar esta clase más útil que el código directamente de Recetas de iOS, ya que mi clase trata todas las células de la misma manera, independientemente de si están construidas usando XIB, UIStoryboard o código. Este repositorio también incluye muestras de trabajo.
Nota al pie completa, ¿me puede indicar algún tipo de guía o muestra de cómo está haciendo esto porque suena genial, actualmente tengo que pasar por una punta para encontrar la vista adecuada para usar en mis celdas personalizadas. Esto no es ideal Y parece que tienes una gran solución. –
¿Puede explicar "parece que solo le permite establecer el propietario del archivo a una clase conocida, no a un ID que implementa un protocolo?" ¿Significa constructor de interfaz? – rooftop
@rooftop yes, "it" se refiere a Interface Builder en ese caso. Al editar/configurar el objeto propietario del archivo, hay una opción "Clase" que le permite seleccionar la clase del propietario del archivo. Esa casilla en IB no me permite ingresar id como tipo, y me pregunto si esto es posible. ¡Gracias! –
thauburger