Clasificaciones de classs personalizadas iOS TableViewCell devuelven null

Utilizo el diseñador Xamarin iOS para diseñar una class personalizada de TableViewCell para mi TableView. Pero todas las properties de subvistas de celda (salidas) devuelven nulo excepto la celda misma.

Mi class de celda personalizada:

partial class VehiclesTableCell : UITableViewCell { public VehiclesTableCell(IntPtr handle) : base(handle) { } public void UpdateCell(string licensePlate) { licensePlateLabel.Text = licensePlate; //hit the null reference exception for licensePlateLabel } } 

Clase parcial generada:

 [Register ("VehiclesTableCell")] partial class VehiclesTableCell { [Outlet] [GeneratedCode ("iOS Designer", "1.0")] UILabel licensePlateLabel { get; set; } void ReleaseDesignerOutlets () { if (licensePlateLabel != null) { licensePlateLabel.Dispose (); licensePlateLabel = null; } } } 

Y GetCell de mi class de tabla de origen:

 public class VehiclesTableSource : UITableViewSource { public override UITableViewCell GetCell(UITableView tableView, NSIndexPath indexPath) { // Dequeueing the reuse cell var cell = (VehiclesTableCell)tableView.DequeueReusableCell(new NSString(typeof(VehiclesTableCell).Name)); // Set cell properties cell.UpdateCell(LicensePlate); // Return the cell with populated data return cell; } } 

Como vemos, el código generado tiene una salida para licensePlate, ¿por qué es nulo su propiedad? ¿Se supone que el storyboard no debe crear instancias de todas sus subvistas automáticamente? Al less sucede en todas las demás situaciones.

introduzca la descripción de la imagen aquí

Estaba teniendo el mismo problema con mi TableViewCell personalizado. Descubrí el problema con TableView.RegisterClassForCellReuse (typeof(MyCell), MyCellId) . Tuve que cambiarlo a TableView.RegisterNibForCellReuse(UINib.FromName("MyCell", NSBundle.MainBundle), MyCellId) para poder cargar mi .xib.

Me encontré con este problema yo mismo. Esto es lo que hice para resolverlo:

  1. Instale los componentes de la subvista en el constructor de la célula personalizada. En tu caso, algo como:

    public VehiclesTableCell(IntPtr handle) : base(handle) { licensePlateLabel = new UILabel(); }

  2. Reemplazar el método LayoutSubviews:

    public override void LayoutSubviews () { base.LayoutSubviews (); licensePlateLabel.Frame = new RectangleF(63, 5, 33, 33); // Your layout here }

La información de esta guía me llevó hasta aquí, pero idealmente habría una manera de lograr esto sin crear instancias y distribuir manualmente los componentes de las subvenciones, ya que ya están definidos en el diseñador de IOS. Esperemos que alguien pueda escuchar una mejor manera de hacer esto …

EDIT: encontré esta respuesta que explica por qué no pude enlazar la celda de la tabla personalizada que creé en el diseñador. TLDR: asegúrese de que Identity -> Class y Table View Cell -> Identifier estén configurados en el nombre de class de celda de vista de tabla personalizado en la window del inspector.

Tuve el mismo problema y, por lo que he descubierto, si estás utilizando storyboard, simplemente puedes ingresar tu nombre de class personalizado en las properties de tu celda de la tabla en el diseñador de iOS y debería funcionar. Llamar a RegisterClassForCellReuse() es lo que causa el problema de sub vistas secundarias. Una vez que eliminé esa llamada de método parecía funcionar