Используйте подкласс UiTableViewCell в качестве элемента Monotouch.Dialog

Я пытаюсь понять, как: 1. использовать IB в Xcode 4+, чтобы визуально создать собственный подкласс UITableViewCell для использования в MT.

  1. Как использовать этот пользовательский класс в качестве элемента в MT.Dialog.

Я много искал и не нашел ни одного примера или не смог его решить. Вот процесс, который я пытался:

  1. Шаг 1 кажется достаточно простым теперь, когда я нашел хорошее руководство: http://www.arcticmill.com/2012/05/uitableview-with-custom-uitableviewcell.html

  2. Шаг 2, кажется, где я застрял. Как только у меня появится новый класс, в этом случае на него будет нанесено несколько меток:

    public partial class CustomListCell : UITableViewCell {
      public CustomListCell () :base(UITableViewCellStyle.Default,"CellID") { 
      }
    
      public void UpDateData(string lbl1, string lbl2, string lbl3) {
        this.lblLabel1.Text = lbl1;
        this.lblLabel2.Text = lbl2;
        this.lblLabel3.Text = lbl3;
      }
    }
    

Я не могу понять, как превратить это во что-то, что я могу использовать в MT.Dialog. Я пытался :

public partial class CustomListCell :Element

но элементы управления метками, похоже, не создаются каждый раз. Независимо от того, где я вызываю UpdateData, все они имеют значение null, следовательно, исключение нулевой ссылки, даже если конструктор выполнился просто отлично. Я также пытался сделать его OwnerDrawnElement, но столкнулся с парой проблем.

Это возможно? Есть ли рекомендуемая схема?


person W. Christopher Moses    schedule 31.01.2013    source источник


Ответы (1)


Я думаю, что образец, который вы ищете, - это OwnerDrawnCell: https://github.com/migueldeicaza/MonoTouch.Dialog/blob/master/MonoTouch.Dialog/Elements/OwnerDrawnElement.cs

Посмотрите, как он переопределяет метод GetCell() для предоставления пользовательской ячейки:

public override UITableViewCell GetCell (UITableView tv)
{
  OwnerDrawnCell cell = tv.DequeueReusableCell(this.CellReuseIdentifier) as OwnerDrawnCell;

  if (cell == null)
  {
    cell = new OwnerDrawnCell(this, this.Style, this.CellReuseIdentifier);
  }
  else
  {
    cell.Element = this;
  }

  cell.Update();
  return cell;
}

Вам просто нужно сделать то же самое, за исключением того, что вам нужно заменить OwnerDrawnCell ячейкой, загруженной XIB.


Я также сделал сообщение в блоге о том, как я загружаю ячейки из XIB, используя новый вариант API DequeueReusableCell для iOS6 — см. http://slodge.blogspot.co.uk/2013/01/uitableviewcell-using-xib-editor.html

person Stuart    schedule 31.01.2013