2016-07-29 15 views
0

Ich verwende wiederverwendbare Zellen in einer UICollectionView. Daher muss ich Eventhandler für Schaltflächen in jeder Zelle abonnieren und abmelden, um mehrere Ereignisfeuern zu vermeiden. Wie ich es verstehe, könnte ich leicht Parameter mit einem Lambda-Ausdruck an den Handler übergeben, aber das würde bedeuten, dass man sich nicht abmeldet.Wie verwende ich CustomEventArgs in meinem Handler, die ich UIButton.TouchUpInside zuweisen?

Also habe ich eine Klasse für CustomEventArgs erstellt:

internal class CustomEventArgs : EventArgs 
{ 
    public DetailCell Cell {get; private set; } 

    public int Position { get; private set; } 

    public CustomEventArgs(DetailCell cell, int position) 
    { 
     this.Cell = cell; 
     this.Position = position; 
    } 
} 

Und ich versuche, diese zu unterzeichnen, sobald die Zelle in der folgenden Überschreibung erstellt:

public override void WillDisplayCell(UICollectionView collectionView, UICollectionViewCell cell, NSIndexPath indexPath) 
    { 
     var cell = cell as DetailCell; 
     if (cell != null) 
     { 
      var eventArgs = new CustomEventArgs(cell, (int)indexPath.Item); 
      cell.EditButton.TouchUpInside += OnEditClicked(this, eventArgs); 
     } 
    } 

Aber ich bin immer Ein Kompilierungsfehler besagt, dass die void OnEditClicked-Methode nicht in System.EventHandler konvertiert werden kann. Ich versuche, den Return-Typ von OnEditClicked auf EventHandler zu setzen, aber dann bin ich nicht genau sicher, ob das richtig ist, und wenn es so ist, bin ich mir nicht sicher, was ich zurückgeben würde.

Ich bin ziemlich sicher, dass es eine Lücke in meinem Wissen gibt, und dass es hier eine einfache Lösung gibt. Ist es möglich, TouchUpInside so zu abonnieren, wie ich es tue, und wenn ja, was vermisse ich dazu?

Antwort

0

Ein wenig spät auf die Party, aber die Art, wie Sie Ihren Event-Handler hinzufügen, funktioniert nicht. Der Code sollte wie folgt aussehen: cell.EditButton.TouchUpInside += OnEditClicked;. Auf diese Weise wird es erneut kompilieren. In der OnEditClicked-Methode können Sie den Absender in DetailCell umwandeln. Anstatt also benutzerdefinierte EventArgs zu schreiben, sollten Sie Ihre benutzerdefinierte Zelle ändern.