Wie fügt man die Ansicht von uiviewcontroller als Inhaltsansicht zu uitableviewcell hinzu?

8

Ich möchte eine Ansicht des uiviewcontrollers hinzufügen, die eine Schaltfläche und einige Beschriftungen als Inhaltsansicht einer uitableviewcell hat.

Ich kann zwar hinzufügen, aber die Tastenaktion verursacht einen Absturz.

%Vor%

Allerdings gibt es Speicherlecks, wenn es aus der Sicht entfernt wird. Das Dealloc von myviewcontroller wird nicht aufgerufen.

Was ist der richtige Weg, dies zu tun?

  1. Fügt einer uitableview-Zelle eine Ansicht hinzu welches einen Knopf hat und von bearbeitet wird der Viewcontroller

  2. Wie kann sichergestellt werden, dass Speicher freigegeben wird? wenn die Ansicht den Gültigkeitsbereich verlässt?

TIA, Praveen

    
Praveen S 08.04.2011, 14:04
quelle

3 Antworten

1

Ich denke, das Problem ist, dass Sie den Controller freigeben und einfach die Subview verwenden, die von seinem Superview beibehalten wird. Das Aktionsmuster benötigt ein Ziel, von dem ich annehme, dass es sich um den freigegebenen Controller handelt. Und warum sollten Sie Ihren viewController freigeben, wenn Sie nur die Ansicht benötigen? Bewahre es auf und behalte eine Referenz durch eine Eigenschaft dazu.

Meine Art, Unteransichten zu einer Tableview-Zelle hinzuzufügen, würde in einer Unterklasse von UITableViewCell liegen. Nehmen wir an, Sie haben eine Unterklasse von UITableViewCell , sagen wir ButtonTableViewCell . Die Init der Zelle erstellt und fügt eine UIB-Schaltfläche zu Ihrer Zelle hinzu und fügt sie schön in ihre Inhaltsansicht ein. Entkalken Sie eine Eigenschaft, die auf die Schaltfläche verweist. Wie UIButton *myButton . Was in CellForRowAtIndexPath getan werden sollte, ist etwa so:

%Vor%

Ich habe den Initialisierer initWithReuseIdentifier erfunden, der einfach implementiert werden kann.

Sie stellen die Freigabe des Speichers mit der viewDidUnload Methode der UIViewController und die Dealloc-Methode.

    
Nick Weaver 08.04.2011, 14:06
quelle
1

"Tastenaktion verursacht einen Absturz" - Was ist der Absturz beim Tippen auf die Schaltfläche?

Sie scheinen auch nur die Ansicht von MyViewController zu verwenden (da Sie die Ansicht der Zelle hinzufügen und dann den Controller freigeben) - was soll dieser Controller tun, außer eine Sicht zu enthalten? Warum nicht einfach eine Ansicht verwenden?

Auch (der Zufallswert ist hier zu beachten) hat der übliche Konstruktor einer Schaltfläche keine neue / alloc / copy und garantiert daher keine Veröffentlichung. Ich habe eine Menge Code-Absturz durch unangemessene Freigabe von UIButton gesehen.

    
Rayfleck 08.04.2011 15:50
quelle
1

Das Hinzufügen einer Ansicht eines Controllers als subview zu einer anderen Ansicht behält den Controller nicht bei. Der Controller wird unmittelbar nach dem Freigabeaufruf freigegeben und alle Tastenaktionen werden an die nicht zugeordnete Instanz gesendet.

Wir können dies vermeiden, indem wir einen starken Bezug zum Controller beibehalten.

%Vor%

oder indem Sie einen View-Controller als ChildViewController

hinzufügen %Vor%     
Deekshith Bellare 23.04.2014 10:18
quelle

Tags und Links