Ich möchte eine Schaltfläche zu einer Tabellenzelle hinzufügen. Das "Delete Event" in der Kalender App hat mich inspiriert ... (ein ähnlicher Fall ist "Kontakt teilen" in Kontakten)
Ab sofort gibt es
%Vor%was tatsächlich einen Knopf erzeugt. Es sieht noch nicht so aus wie es soll (es ist offensichtlich, dass ich noch nie mit Tasten im iPhone umgegangen bin), aber ist das zumindest der richtige Ansatz?
Wie Sie es jetzt haben, jedes Mal, wenn eine Zelle angezeigt wird, ordnen Sie eine Schaltfläche zu, legen ihren Wert fest und fügen sie der contentView der Zelle hinzu. Wenn die Zelle wiederverwendet wird (über dequeueReusableCellWithIdentifier
), werden Sie einen weiteren neuen Button erstellen, der zur Zelle (über dem alten) hinzugefügt wird usw. Die Tatsache, dass sie durch% co_de gegangen ist %, aber keine explizite Freigabe bedeutet, dass die Anzahl der Retouren jeder Schaltfläche nie auf Null gehen wird, so dass sie alle bleiben. Nach einer Weile des Scrollens wird die Zelle mit hunderten von Button-Subviews enden, die wahrscheinlich nicht Ihren Vorstellungen entsprechen.
Ein paar Tipps:
Verteilen Sie niemals Zeug in einem addSubview
-Aufruf, es sei denn, es ist fertig, wenn cellForRowAtIndexPath
Null zurückgibt und Sie die Zelle initialisieren. Alle anderen nachfolgenden Zeiten werden Sie die zwischengespeicherte Zelle zurückgeben, die Sie bereits eingerichtet haben, so dass Sie nur die Beschriftungen oder Symbole ändern müssen. Sie werden alle diese Schaltflächenzuordnungselemente innerhalb der dequeueReusableCellWithIdentifier
-Konditionalität direkt nach dem Zellenzuweisungscode verschieben wollen.
Die Schaltfläche muss eine Position und auch ein Ziel haben, damit sie etwas tut, wenn sie angetippt wird. Wenn jede Zelle diese Schaltfläche haben soll, ist es ein netter Trick, wenn sie alle auf dieselbe Zielmethode zeigen, aber den if
-Wert der Schaltfläche auf den tag
der Zelle setzen (außerhalb des Zellenzuweisungsblocks, da er für jeden variiert) Zelle). Der allgemeine Abgriffhandler für die Schaltfläche würde den Tag-Wert des Absenders verwenden, um die zugrunde liegenden Daten in der dataSource-Liste nachzuschlagen.
Rufen Sie indexPath.row
auf der Schaltfläche auf, nachdem Sie eine release
erstellt haben. Auf diese Weise fällt die Retain-Anzahl auf Null und das Objekt wird tatsächlich freigegeben, wenn das Parent freigegeben wird.
Anstatt die Schaltfläche über addSubview
hinzuzufügen, können Sie sie als addSubview
für die Zelle zurückgeben, sodass Sie sich keine Gedanken darüber machen müssen, sie zu positionieren (es sei denn, Sie verwenden die accessoryView bereits für etwas) sonst - wie Offenlegungstasten).
Ich habe einen anderen Ansatz gewählt, um ein Äquivalent zur Schaltfläche "Ereignis löschen" in der Kalender-App zu erstellen. Anstatt eine Schaltfläche als Unteransicht hinzuzufügen, habe ich den Zellen zwei Hintergrundansichten hinzugefügt (rot und dunkelrot, mit schönen Farbverläufen) und dann die Ecken gerundet und den Rahmen grau dargestellt.
Der Code unten erstellt eine wiederverwendbare Zelle (in der üblichen Weise). Die beiden Bilder, auf die Bezug genommen wird ('redUp.png' und 'redDown.png'), wurden einem Screenshot der Schaltfläche 'Ereignis löschen' des Kalenders entnommen. (Das schien schneller zu sein, als die Verläufe programmatisch zu erzeugen.) Es gibt Spielraum für ein bisschen mehr Feinabstimmung, um es noch näher an die "Delete Event" -Erscheinung des Kalenders zu bringen, aber das ist ziemlich nah.
Die Aktion der Schaltfläche wird durch die TableView-Delegate-Methode tableView ausgelöst: didSelectRowAtIndexPath: method.
%Vor%Ja, das ist im Allgemeinen der richtige Ansatz.
Ein Tipp:
Legen Sie den Rückruf für Ihre Schaltflächenereignisse so fest, dass er beim Klicken tatsächlich ausgeführt wird.
%Vor%BEARBEITEN : Angepasster Code für die Verwendung einer Systemschaltfläche, die vieles von dem, was ich geschrieben habe, unnötig macht.
Ja, Sie sind auf dem richtigen Weg, das ist der einfachste Weg, um einer Zelle eine Unteransicht hinzuzufügen (die andere Unterklasse einer UITableViewCell
).
Überprüfen Sie die Apple Guide für weitere Informationen.
Tags und Links iphone uitableview uibutton