Quiero ser capaz de diseñar mi propia UITableViewCell en IB. Pero sigo recibiendo una excepción de ref nula cuando intento acceder a la etiqueta que definí en IB.Cómo usar UITableViewCell personalizado desde Interface Builder?
Esto es lo que estoy haciendo:
En Interface Builder:
- Quité el "Ver" y añadió un UITableViewCell lugar.
- Se cambió la clase de UITableViewCell a "
TestCellView
". - Agregó un UILabel a la celda.
- Se agregó una salida "
oLblText
" alTestCellView
y se conectó el UILabel. - Se cambió el identificador de la clase a "TestCellView".
Implementar TestCellView.xib.cs
public partial class TestCellView : UITableViewCell
{
public TestCellView(string sKey) : base(UITableViewCellStyle.Default, sKey)
{
}
public TestCellView(IntPtr oHandle) : base(oHandle)
{
}
public string TestText
{
get
{
return this.oLblText.Text;
}
set
{
// HERE I get the null ref exception!
this.oLblText.Text = value;
}
}
}
** ** Los TestCellView.designer.cs
[MonoTouch.Foundation.Register("TestCellView")]
public partial class TestCellView {
private MonoTouch.UIKit.UILabel __mt_oLblText;
#pragma warning disable 0169
[MonoTouch.Foundation.Connect("oLblText")]
private MonoTouch.UIKit.UILabel oLblText {
get {
this.__mt_oLblText = ((MonoTouch.UIKit.UILabel)(this.GetNativeField("oLblText")));
return this.__mt_oLblText;
}
set {
this.__mt_oLblText = value;
this.SetNativeField("oLblText", value);
}
}
}
En la fuente de mi mesa:
public override UITableViewCell GetCell (UITableView tableView, NSIndexPath indexPath)
{
TestCellView oCell = (TestCellView)tableView.DequeueReusableCell("myCell");
if(oCell == null)
{
// I suppose this is wrong but how to do it correctly?
// this == my UITableViewSource.
NSBundle.MainBundle.LoadNib("TestCellView", this, null);
oCell = new TestCellView("myCell");
}
oCell.TestText = "Cell " + indexPath.Row;
return oCell;
}
Tenga en cuenta que NO quiero una solución que implique un UIViewController para cada célula. He visto un par de ejemplos en la web haciendo esto. Solo creo que es una exageración total.
¿Qué estoy haciendo mal?
Así es exactamente como lo tengo ahora. Simplemente no me gusta tener un controlador. La razón es: cuando uso los estilos de celda predeterminados, tampoco tengo un controlador. Entonces, ALLÍ decidió que NO se necesita ningún controlador. Al crear celdas personalizadas, quieren que tengamos un controlador por celda. – Krumelur
Sí, cuando utiliza los estilos de celda predeterminados, no se necesita ningún controlador ya que las celdas se están creando mediante programación. Pero desea utilizar celdas, objetos de interfaz de usuario en general, que se cargan desde un archivo NIB. No basta con soltar una celda personalizada en un archivo NIB. Debe estar conectado de alguna manera con el propietario del archivo que, en este caso, debe ser un UIViewController. –