0

如果您使用自定义单元格附件而不是 DetailDisclosureButton 您将无法再使用 AccessoryButtonTapped 事件...如何使用自定义单元格附件(即设置为单元格的 AccessoryView 的 UIButton)并能够获得 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 事件 - 根据我的理解,这是一个垃圾收集问题 - 我想这也很重要,因为设备本身不会发生崩溃......但是里面的代码也不起作用

4

1 回答 1

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);
于 2013-06-04T15:48:43.040 回答