在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
?
答案 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.
}
}
// - - - -
}
// - - - -
}