Monotouch使用自定义单元配件 - 如何分辨选择哪一行

时间:2013-06-03 23:06:16

标签: c# ios objective-c xamarin.ios monotouch.dialog

如果您使用自定义单元格附件而不是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事件 - 从我的理解它的垃圾收集问题 - 我想这也不重要,因为不会在设备本身发生崩溃。但是里面的代码不起作用

1 个答案:

答案 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);