如果您使用自定义单元格附件而不是DetailDisclosureButton,则不能长时间使用AccessoryButtonTapped事件...如何使用自定义单元格附件(即UIButton设置为单元格的AccessoryView)并且能够获得NSIndexPath计算所选的行和部分?
image = UIImage.FromFile ("Images/checkmark.png");
lockButton = new UIButton(UIButtonType.Custom);
frame = new RectangleF(0f, 0f, 25f, 25f);
lockButton.Frame = frame;
lockButton.SetBackgroundImage(image, UIControlState.Normal);
lockButton.TouchUpInside += (sender, e) =>
{
try{
int i =0;
foreach(UIView sv in cell.Subviews)
{
if(cell.Subviews[i] is UITableView)
;
}
}
catch
{
}
};
if (sourceType == TableSoureType.Collections && collGroup [indexPath.Section].LocationEntity [indexPath.Row].CollectionStatus.ToLower () != "open") {
cell.TextLabel.TextColor = UIColor.Gray;
cell.AccessoryView = lockButton;
}
else if(sourceType == TableSoureType.Collections && collGroup [indexPath.Section].LocationEntity [indexPath.Row].CollectedToday) {
cell.TextLabel.TextColor = UIColor.Black;
cell.AccessoryView = lockButton;
}
else
{
cell.TextLabel.TextColor = UIColor.Black;
cell.Accessory = UITableViewCellAccessory.DetailDisclosureButton;
}
这可能是一个新帖子的原因但我也有一个问题,当我点击按钮时,应用程序退出模拟器 - 我明白它可能是一个垃圾收集问题所以我移动了我的按钮声明,图像和框架到班级无济于事。
所以我有两个问题:
1 - 一旦我使TouchUpInside事件正常工作,如何确定在该事件被触发时选择了哪个单元格?
2 - 如何在不造成模拟器崩溃的情况下触发TouchUpInside事件 - 从我的理解它的垃圾收集问题 - 我想这也不重要,因为不会在设备本身发生崩溃。但是里面的代码不起作用
答案 0 :(得分:1)
如果我理解正确你在你的单元格中放置一个UIButton,并想使用它而不是UITableView的RowSelected事件?
要解决内存问题,请在将UIButtons添加到单元格之前将其添加到列表中。您可以在按钮上设置Tag属性以跟踪它们。
当UITableView存在时,某些地方会持续存在..
List<UIButton> buttons = new List<UIButton> ();
在创建UITableView
的函数中UIButton b = new UIButton (new RectangleF(140, 10, 385, 40));
b.Tag = buttons.Count;
buttons.Add (b);
UIButton b2 = new UIButton (new RectangleF(140, 10, 385, 40));
b2.Tag = buttons.Count;
buttons.Add (b2);
要点击按钮,请执行以下操作:
NSIndexPath ns = NSIndexPath.FromRowSection (b.Tag, 0);
UITableViewCell tcell = tableView.CellAt (ns);