2017-12-14 3 views
0

Ich habe eine einzelne Prototypzelle erstellt, die zwei Labels (mainLabel und subLabel) und einen uiimageview hat. In der uitableview möchte ich mehrere Zellen haben, die den Prototyp wiederverwenden und bei Bedarf wird das SubLabel ausgeblendet und der uiimageview wird mit einem anderen oder einem Uiswitch geändert. Die zwei Bezeichnungen haben für jede Zelle einen unterschiedlichen Text. Hast du irgendwelche Vorschläge/Hinweise, um es zu tun? möglicherweise in einer MVVM-Architektur?Kann ich eine einzelne benutzerdefinierte Zelle für mehrere verschiedene Zellen verwenden?

Ich werde beschreiben, was ich tue:

ich eine Struktur haben (Modell) mit zwei Eigenschaften: Label und Sublabel. Dies wird dann durch ein viewModel instantiiert, das Text für jede Zelle bereitstellt, und zwar durch eine Methode namens getModel (_ indexPath: IndexPath) -> cellModel {...}. Schließlich in UIViewController, in TableView (_ TableView: UITableView, CellForRowAt IndexPath: IndexPath) {...} Ich rufe getModel(), mit dequeueReusingCell und Einrichten der einzelnen Zelle. In getModel() gibt es einen Huuuge Schalter, den ich verwende, um zu wissen, welche Zelle ist

Dann in uitableviewcell Ich habe eine Methode, die Sublabel versteckt und ändert uiimageview.

Es funktioniert irgendwie, aber ich habe ein paar Probleme mit dem Scrollen. Zum Beispiel wird manchmal ein uiimageview in einer anderen Zelle gezeichnet, oder ein subLabel ist versteckt, auch wenn es nicht beabsichtigt ist. Ich schätze, das liegt daran, dass die Zelle wieder verwendet wird und ich sie nicht zurücksetze.

Wie auch immer, irgendwelche Vorschläge oder Ideen?

Ich weiß, das ist overkilling ...

Antwort

0

Keine Notwendigkeit für jedes Muster. Ja, Sie können dieses Einzelzellen-Design für alle Zellen verwenden. Verstecken/löschen Sie die Beschriftung (en) und die Bildansicht nach Belieben pro Zelle.

0

allererst Sie Standardwert sowohl für die Etiketten gesetzt und Imageview

dh (einen Titel Label, ein Sublabel betrachten und einen Imageview)

lblTitle.isHidden = false 
     lblSubLabel.isHidden = false 
     imgViewIcon.image = nil 

Dann zeigen nur Etiketten in bestimmten Bedingung, dass Sie passen wollen und legen Bild in Imageview

dh (man denke an Ihren Zustand Sublabel zu verstecken)

if needToHide == true { 
     lblSubLabel.isHidden = true 
} 
Verwandte Themen