重绘/刷新时自定义EntryElement对齐更改

时间:2014-06-23 19:27:30

标签: ios xamarin.ios xamarin monotouch.dialog

我为MonoTouch.Dialog创建了一个自定义EntryElement,以便所有控件都向右对齐。代码如下:

public class RightAlignEntryElement : EntryElement
{
   private NSString _cellKey = new NSString("RightAlignedEntryElement");

   public RightAlignEntryElement(string caption, string placeholder, string value) : base(caption, placeholder, value)
   {
   }

   protected override UITextField CreateTextField(RectangleF frame)
   {       
      var paddedFrame = frame;
      paddedFrame.Width = frame.Width -= 10;
      var textField = base.CreateTextField(paddedFrame);
      textField.TextAlignment = UITextAlignment.Right;


      return textField;
  }

  public override UITableViewCell GetCell(UITableView tv)
  {
     var cell = base.GetCell(tv);
     return cell;
  }

  protected override NSString CellKey 
  {
     get { return _cellKey; }
  }
}

这样可以正常工作,直到Dialog被刷新,例如滚动表,或者呈现子视图然后被解除。

在单元格右侧有填充之前,滚动一旦填充消失。我已经看到这是过去的一个问题,并且已经在这里和Xamarin论坛上看到了各种其他建议,但似乎没有什么对我有用。

请参阅附加屏幕之前和之后的抓取。

Before

After

1 个答案:

答案 0 :(得分:0)

为了记录,以下是我在另一个论坛上对此问题的回复:

行为是由于您没有在RightAlignEntryElement中使用单元格重用

您的GetCell方法应如下所示:

public override UITableViewCell GetCell(UITableView tv) 
{ 
   var cell = tv.DequeueReusableCell (CellKey) as UITableViewCell; 
   if (cell == null) { 
      cell = base.GetCell(tv); 

      cell.TextLabel.Font = UIFont.FromName("HelveticaNeue-Light", 16); 
   } 

   return cell; 
}