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); }