2013-06-03 2 views
0

Если вы используете пользовательскую сотовую аксессуар вместо DetailDisclosureButton, вы не можете долго использовать событие AccessoryButtonTapped ... как я могу использовать пользовательскую сотовую аксессуар (то есть набор UIButton как AccessoryView для ячейки) и иметь возможность получить NSIndexPath, который подсчитывает строку и раздел, которые были выбраны?Monotouch с использованием пользовательских сотовых аксессуаров - как определить, какая строка выбрана

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

Если я правильно понимаю, вы помещаете UIButton внутри своих ячеек и хотите использовать это вместо события RowSelected в UITableView?

Чтобы решить проблемы с памятью, добавьте 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);