Bewährte Methode: Aktionen von Schaltflächen in Tabellenansichtszellen behandeln?

8

Ich habe eine "Kontaktliste" -Tabellenansicht mit "Kontakt" -Zellen, die eine E-Mail-Schaltfläche enthalten, die, wenn sie angetippt wird, einen E-Mail-Composer mit der E-Mail-Adresse dieses Kontakts darstellen sollte.

Was ist der beste Weg, um das UIButton mit der "Kontakt" -Instanz dieser Zelle zu verbinden?

Ich habe Antworten für die beiden Ansätze geschaffen, die mir einfallen - die ich aber nicht wirklich befriedigend finde. Welche bevorzugen Sie, oder besser noch, schlagen Sie bessere vor!

    
Yang Meyer 01.04.2013, 14:29
quelle

7 Antworten

15

Ansatz 2:

Lassen Sie die Zellen die Aktion verarbeiten und rufen Sie eine benutzerdefinierte Delegate-Methode auf.

%Vor%

Verstößt die Behandlung von Ereignissen in einer Ansicht nicht gegen das MVC-Prinzip?

    
Yang Meyer 01.04.2013 14:30
quelle
7

Die Art, wie ich es am häufigsten sehe, ist, Tags den Schaltflächen zuzuteilen, die dem indexPath.row entsprechen.

%Vor%     
rdelmar 01.04.2013 17:24
quelle
4

Eine andere Lösung:

Für mich funktioniert so etwas einwandfrei und sieht sehr elegant aus:

%Vor%

Update 12/01/2017

Nach einiger Zeit und der Implementierung vieler UITableViews muss ich zugeben, dass die beste Lösung das Delegationsmuster ist, das hier bereits von anderen vorgeschlagen wird.

    
MP23 24.03.2014 14:54
quelle
2

Wenn ich diese Antworten lese, möchte ich meine Meinung sagen:

Zelle nach Tastenposition

%Vor%

die oben genannte Lösung ist sicherlich die am schnellsten zu implementieren , aber es ist nicht das Beste aus der Sicht des Design / Architektur . Außerdem erhalten Sie die indexPath , müssen aber eine andere Information berechnen. Das ist eine coole Methode, würde aber nicht das Beste sagen.

Zelle nach Zyklus auf den Tastenübersichten

%Vor%

Holen Sie sich die Zelle auf diese Weise ist teurer von den vorherigen und es ist nicht so elegant.

Zelle nach Schaltflächen-Tag

%Vor%

Absolut nicht. Verwenden Sie die Tag-Dose scheint eine coole Lösung, aber das -Tag eines Steuerelements kann für eine Menge Dinge verwendet werden , wie der nächste Responder usw. Ich mag es nicht und das ist nicht die richtiger Weg .

Zelle nach Entwurfsmuster

%Vor%

Dies ist die Lösung . Verwenden Sie delegation oder verwenden Sie blocks ist wirklich eine nette Sache zu tun, weil Sie alle Parameter übergeben können, die Sie möchten und die Architektur skalierbar machen . Tatsächlich könnten Sie in der delegate -Methode (aber auch mit blocks ) direkt Informationen senden wollen, ohne sie später berechnen zu müssen, wie die vorherigen Lösungen.

Viel Spaß;)

    
Matteo Gobbi 16.05.2014 18:43
quelle
2

Swift Closure Ansatz

Ich denke, ich habe einen neuen Ansatz gefunden, der ein bisschen schlau ist. Sag mir, was du darüber denkst.

Deine Zelle:

%Vor%

Ihre UITableViewDataSource:

%Vor%

Sie können auch Daten innerhalb dieses Anrufs übergeben. Wie die Zelle oder etwas, das in der Zelle gespeichert ist.

Grüße, Alex

    
Sn0wfreeze 22.11.2016 12:11
quelle
1

Ansatz 1:

Bestimmen Sie die Zelle und damit den Indexpfad, indem Sie die Ansichtshierarchie der Zelle über die Schaltfläche durchlaufen.

%Vor%

Es fühlt sich klobig an. Irgendwie "mah" ...

    
Yang Meyer 01.04.2013 14:29
quelle
0

Ich würde einen anderen Ansatz anbieten, einfach das aktive Ziel nicht zuweisen, das Ereignis wird die Antwortkette durchlaufen:

%Vor%

und dann, in Ihrer Ansicht Controller:

%Vor%

Dies erzeugt jedoch eine Compiler-Warnung, die hinzugefügt wird, um sie zu ignorieren:

%Vor%     
darkangel 06.02.2015 03:45
quelle