UITableView y su celda en un file xib

Larga historia corta, quiero crear un file XIB, donde contiene:

  1. Una vista. En esa vista, tiene muchas cosas y una tablaView. (fuente de datos conectados, delegar en el propietario del file). Esa vista es la vista principal de los files XIB.

  2. Celda personalizada, (use como celda prototipo de tableView, ya que XIB no admite prototype tableView).

¿Cómo podría lograr ambos? Además, quiero saber lo mismo que aplicar a UICollectionView.

Había creado ambos, lo cargué a la vista principal (la vista principal está en el storyboard principal). Pero el tableView no carga la celda personalizada como se esperaba. La celda está en blanco, no se parece a lo que está diseñado en la punta.

EDIT 1

Así es como logging la punta en la vista principal en el guión gráfico:

- (UIView *)buildViewFromViewControllerClass:(Class)viewControllerClass { id viewController = [[viewControllerClass alloc] initWithNibName:NSStringFromClass(viewControllerClass) bundle:nil]; [viewController view].frame = self.containerView.bounds; [self addChildViewController:viewController]; return [viewController view]; } 

Tengo muchos viewControllers, así que me doy count de que esta es la mejor manera de agregar VC.

Acerca de la punta en la descripción anterior, solo utilizo la initialization regular:

 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { // init cell CustomCell *cell = [tableView dequeueReusableCellWithIdentifier:@"CustomCell"]; if (!cell) { cell = [[PaymentCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"CustomCell"]; } return cell; } 

Si en la vista se hizo el método de carga, logging el plumín en el tableView, se bloqueará en [tableView dequeueResuableCell...] . El código registrado:

 - (void)viewDidLoad { [super viewDidLoad]; // [self.tableView registerNib:[UINib nibWithNibName:self.nibName bundle:nil] // forCellReuseIdentifier:@"CustomCell"]; // I'm commenting it, because it caused crash. } 

Mensaje de locking:

*** Terminar la aplicación debido a la exception no detectada 'NSUnknownKeyException', motivo: '[setValue: forUndefinedKey:]: esta class no cumple con la encoding de valor key para la tabla de tablaView.'

¿Qué hice mal aquí? Aquí hay una image de cómo diseñé la punta:

Modelo

Como puede ver, el mainView del propietario del file está conectado a mainView , donde contiene tableView. CustomCell es solo una celda de layout personalizado, se define en el mismo file (el file .m).

Debe registrar la punta de la siguiente manera.

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

Generalmente he visto que registerClass no carga la vista, sino solo la class. No sé por qué.

Además, un .xib debería contener solo una vista. Por lo tanto, debe hacer un cambio diferente para UITableViewCell y UITableView . La razón detrás es muy simple. Cada vez que se carga xib, se crean todas las vistas dentro del xib. No quisiera una tabla nueva cada vez que cree una celda. ¿Derecha?

En cuanto al crash al que se enfrenta. El error parece que hay un problema de salida con el nombre tableView . Prueba eliminar salidas e reinicializarlas.

Adiciones

para un UICollectionView puede registrar una class, cargaría su vista desde xib.

  [self.collectinView registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:cellIdentifier] 

Actualizar

Si está utilizando un guión gráfico, puede agregar dos celdas de prototipo y agregará dos celdas dentro de la tabla. Puede agregar todas las vistas allí mismo y darles diferentes files de class. Reduciría la cantidad de files xib que necesita mantener y también no necesitará registrar sus nibs. Esto podría ser un tutorial para él