protected virtual void PrepareEntry(UITableView tableview)
{
SizeF size = _computeEntryPosition(tableview);
_entry = new CustomTextField(new RectangleF(size.Width + 10, (ContentView.Bounds.Height - size.Height) / 2 - 10, 320 - size.Width - 20, size.Height + 20));
_delegate = new CustomTextFieldDelegate();
_entry.Delegate = _delegate;
_entry.VerticalAlignment = UIControlContentVerticalAlignment.Center;
TextLabel.BackgroundColor = UIColor.Clear;
_entry.AutoresizingMask = UIViewAutoresizing.FlexibleWidth |
UIViewAutoresizing.FlexibleLeftMargin;
_entry.MaxCharacters = 5;
_entry.Started += delegate {
var position = tableview.IndexPathForCell(this);
tableview.SelectRow(position, false, UITableViewScrollPosition.None);
};
_entry.ValueChanged += delegate {
if (_element != null)
{
_element.Value = _entry.Text;
}
};
_entry.EnablesReturnKeyAutomatically = true;
_entry.Ended += (object sender, EventArgs e) => {
if (_element != null)
{
_element.Value = _entry.Text;
if (_element.OnValueChanged != null)
{
_element.OnValueChanged(_element);
}
}
var position = tableview.IndexPathForCell(this);
if (tableview.IndexPathForSelectedRow != null && position != null && position.Compare(tableview.IndexPathForSelectedRow) == 0)
{
tableview.DeselectRow(position, false);
}
};
_entry.ShouldChangeCharacters = (textField, range, replacement) =>
{
if (_element.MaxLength < 0)
{
return(true);
}
if (_element.MaxLength == 0)
{
return(false);
}
using (NSString original = new NSString(textField.Text))
{
var replace = original.Replace(range, new NSString(replacement));
if (replace.Length > _element.MaxLength)
{
return(false);
}
}
return(true);
};
_entry.AddTarget((object o, EventArgs r) => {
if (_element != null)
{
_element.Value = _entry.Text;
}
}, UIControlEvent.EditingChanged);
_entry.ShouldReturn += delegate {
Element elementToFocusOn = null;
foreach (var c in ((Section)_element.Parent).Elements)
{
if (c == _element)
{
elementToFocusOn = c;
}
else if (elementToFocusOn != null && c is EntryElement)
{
elementToFocusOn = c as EntryElement;
}
}
if (elementToFocusOn != _element && elementToFocusOn != null)
{
var cell = tableview.CellAt(elementToFocusOn.GetIndexPath());
cell.BecomeFirstResponder();
}
else
{
_entry.ResignFirstResponder();
}
if (_entry.ReturnKeyType == UIReturnKeyType.Go)
{
_element.FireGo(this, EventArgs.Empty);
}
return(true);
};
_entry.Started += delegate {
EntryElement self = null;
var returnType = _element.ReturnKeyType;
if (returnType != UIReturnKeyType.Default)
{
foreach (var e in (_element.Parent as Section).Elements)
{
if (e == _element)
{
self = _element;
}
else if (self != null && e is EntryElement)
{
returnType = UIReturnKeyType.Next;
}
}
}
_entry.ReturnKeyType = returnType;
};
ContentView.AddSubview(_entry);
}