在xamarin iOS中 - 在UITableViewCell中获取[indexPath.Row],使用按钮单击事件

时间:2015-01-08 11:58:45

标签: c# xamarin.ios xamarin

在Xamarin iOS中 - 我有一个名为TableCell ( public class TableCell : UITableViewCell { } )的类 - 在这个类中我已经声明了按钮。

在按钮点击事件中,我正在尝试访问[indexPath.Row]中的UITableViewCell。我可以选择一行来查找[indexPath.Row]中的UITableViewSource

public class TableSource : UITableViewSource {
//  - - - -
 public override void RowSelected (UITableView tableView, NSIndexPath indexPath)
    {
        new UIAlertView("Row Selected", tableItems[indexPath.Row], null, "OK", null).Show();
        tableView.DeselectRow (indexPath, true); // iOS convention is to remove the highlight

  }

// - - - -

}

如何在[indexPath.Row]中使用按钮点击事件获取UITableViewCell

2 个答案:

答案 0 :(得分:1)

这不是最好的方法,但肯定会有效:

我会使用新属性扩展TableCell类:

public NSIndexPath IndexPath { get; set; }

如果您使用的是单元格重用模式,那么我会将此行添加到UITableViewSource的GetCell方法中:

public override UITableViewCell GetCell(UITableView tableView, NSIndexPath indexPath)
    {
       TableCell cell = tableView.DequeueReusableCell("YourIdentifier") ?? new TableCell();
       cell.IndexPath = indexPath;
       return cell;
    }

之后,您可以随时随地访问该单元的当前IndexPath。即:

public TableCell()
{
     UIButton btn = new UIButton(UIButtonType.RoundRect);
     btn.TouchUpInside += (sender, args)
     {
           new UIAlertView("Button pressed!", indexPath.Row, null, "OK", null).Show();
     }
}

答案 1 :(得分:0)

使用VisibleCells属性。 用户选择行后,UITableViewCell将会显示。


替代解决方案(如果您希望获得类似,但不是相同的单元格): 您可以使用UITableViewCell.GetCell通过UITableView tableView获取,然后将其投放到您的UITableViewCell类型中,然后使用传递的NSIndexPath indexPath调用它的方法。

这样的事情:

public class TableSource : UITableViewSource {
    //  - - - -
     public override void RowSelected (UITableView tableView, NSIndexPath indexPath)
        {
        var cell = tableView.GetCell(tableView, indexPath);
        var myCell class = cell as MyCellClass;
        if (myCell != null) {
            // TODO: do something with cell.
        }          
      }
    // - - - -
    }
// - - - -
}