 <p>The cells are reused in iOS, so you need to make sure you properly unhook handlers and reset state when a cell is reused. You can do something like this:</p> <pre><code>public partial class CustomCell : UITableViewCell { EventHandler _likeButtonHandler; public static readonly NSString Key = new NSString (typeof(CustomCell).Name); public static readonly UINib Nib = UINib.FromName (typeof(CustomCell).Name, NSBundle.MainBundle); public CustomCell () { } public CustomCell (IntPtr handle) : base (handle) { } public override void PrepareForReuse () { LikeButton.TouchUpInside -= _likeButtonHandler; _likeButtonHandler = null; base.PrepareForReuse (); } public void SetupCell (int row, string Name, EventHandler likeBtnHandler) { _likeButtonHandler = likeBtnHandler; LikeButton.TouchUpInside += _likeButtonHandler; LikeButton.Tag = row; NameLabel.Text = Name; RowLabel.Text = row.ToString (); } } </code></pre> <p>Notice that I unhook the event handler in the <code>PrepareForReuse</code> override. This is the correct place to do clean up and reset a cell for reuse. You should NOT be using <code>MovedToWindow()</code>.</p> <p>Then your <code>GetCell</code> method will look like this:</p> <pre><code> public override UITableViewCell GetCell (UITableView tableView, NSIndexPath indexPath) { var cell = tableView.DequeueReusableCell (CustomCell.Key) as CustomCell ?? new CustomCell (); cell.SetupCell (indexPath.Row, _fruits [indexPath.Row], _likeButtonHandler); return cell; } </code></pre> <p>The <code>_likeButtonHandler</code> is a simple <code>EventHandler</code>.</p>